У меня есть базовая настройка запроса GraphQL следующим образом:
Query.js:
const Query = {
dogs(parent, args, ctx, info) {
return [{ name: 'Snickers' }, { name: 'Sunny' }];
},
};
module.exports = Query;
schema.graphql:
type Dog {
name: String!
}
type Query {
dogs: [Dog]!
}
Я создал функцию createServer() для запуска сервера следующим образом:
const { GraphQLServer } = require('graphql-yoga');
const Mutation = require('./resolvers/Mutation');
const Query = require('./resolvers/Query');
const db = require('./db');
function createServer() {
return new GraphQLServer({
typeDefs: 'src/schema.graphql',
resolvers: {
Mutation,
Query,
},
resolverValidationOptions: {
requireResolversForResolveType: false,
},
context: req => ({ ...req, db }),
});
}
module.exports = createServer;
Затем я попытался запросить dogs следующим образом:
query {
dogs {
name
}
}
Но вместо того, чтобы получить имена из массива собак, я получил следующую ошибку:
{
"data": null,
"errors": [
{
"message": "Cannot return null for non-nullable field Query.dogs.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"dogs"
]
}
]
}
Что, кажется, вызывает эту ошибку?
@DanielRearden Хорошо, держись.
@DanielRearden Мой prisma.graphql содержит более 300 строк кода. Следует ли мне скопировать определенную часть или вы хотите, чтобы я скопировал все?
Не уверен, актуальны ли какие-либо другие определения типов. Я ожидаю, что у вас есть код, который выглядит примерно так: github.com/prisma/prisma-examples/blob/master/typescript/… и, возможно, отдельный файл, подобный этому github.com/prisma/prisma-examples/blob/master/typescript/…
@DanielRearden Вопрос обновлен !!
Странно, я могу запустить сервер graphql-yoga с указанными выше typeDefs и резолверами без проблем. Если ./resolvers/Query не является правильным путем для Query, я не уверен, что еще может быть неправильным: /
Если бы это был неправильный путь, узел не смог бы его разрешить и выдал бы ошибку: "Error: Cannot find module ...", и сервер не работал бы. Похоже, что он разрешается, но в пустой объект, поэтому преобразователя dogs там нет. Вы уверены, что экспорт Query.js верен?
@IonutAchim Есть ли способ проверить правильность экспорта Query.js? Я добавил console.info("Query: " + Query) в функцию createServer(), и он вернул Query: [Object Object].
@AndrewL, лучший способ - проверить экспорт модуля. Журнал консоли может вводить в заблуждение. Если вы ничего не экспортируете, он будет преобразован в пустой объект. Так что просто просмотрите файл и посмотрите, что у вас за экспорт.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Приведенный выше код работает, как вы можете видеть в codeandbox: https://codesandbox.io/s/olzj9vvpk5
Но когда я конвертирую Query во что-то вроде {}, он возвращает ту же ошибку, поэтому проверьте свои пути и console.info Query, чтобы проверить путь. Ваш экспорт выглядит правильно, но вы, возможно, забыли сохранить файл, как я вижу из начальных файлов курса. Запрос - это {}. Пожалуйста, проверьте дважды.
Также, если этот код находится в общедоступном репозитории git, поделитесь ссылкой.
Проблема была в опечатке в одном из моих файлов. Я отметил ваш ответ как правильный, потому что ваш код помог мне найти опечатку. Ваше здоровье.
Я знаю, что на этот вопрос был дан ответ, но для меня единственное, что устранило эту проблему, - это также передать аргумент информации.
В моем случае я создаю новый файл Query.js в папке src, но импортирую Query с Query = require ('./ resolvers / Query') и кодирую там. Итак, попробуй проверить путь, думаю проблема в этом.
Эта проблема возникает из-за того, что AWS требует определенных стандартных значений в таблице DynamoDB, таких как createdAt и updatedAd, просто добавьте эти поля вручную с меткой времени в Dynamo db для дальнейшего тестирования. Мутацию всегда нужно запрашивать через id, мне это почему-то было непонятно, когда моя схема создавалась с помощью ampify codegen ...
Похоже, вы неправильно импортируете Query.js или ваши преобразователи настроены неправильно. Покажите остальную часть соответствующего кода, включая то, как вы создаете объект преобразователей и как вы предоставляете определения типов и преобразователи в конструктор GraphQLServer.