【发布时间】:2019-05-28 11:02:56
【问题描述】:
我有一个基本的 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"
]
}
]
}
似乎是什么导致了这个错误?
【问题讨论】:
-
听起来您没有正确导入 Query.js 或者您的解析器设置不正确。请展示其余相关代码,包括如何构造解析器对象以及如何向 GraphQLServer 构造函数提供类型定义和解析器。
-
@DanielRearden 好的,等等。
-
@DanielRearden 我的
prisma.graphql有超过 300 行代码。我应该复制其中的某个部分还是要我复制整个内容? -
奇怪,我可以运行具有上述 typeDef 和解析器的
graphql-yoga服务器没有问题。除非./resolvers/Query不是Query的正确路径,否则我不确定还有什么问题:/ -
如果它是一个不正确的路径节点将无法解析它并抛出错误:
"Error: Cannot find module ..."并且服务器将关闭。看起来它确实解析了,但是解析为一个空对象,所以dogs解析器不存在。你确定Query.js导出是正确的吗?
标签: javascript node.js graphql