GraphQL查询返回错误“无法为非空字段返回空”

时间:2019-01-01 12:36:43

标签: javascript node.js graphql

我有一个基本的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"
      ]
    }
  ]
}

什么似乎导致了此错误?

3 个答案:

答案 0 :(得分:0)

上面的代码可以在codesandbox中看到:https://codesandbox.io/s/olzj9vvpk5

但是,当我将Query转换为类似{}之类的内容时,它会返回相同的错误,因此请检查您的路径和console.log查询以验证路径。您的导出看上去正确,但是您可能忘记了保存文件,正如我从课程入门文件中看到的那样,查询是{}。请仔细检查。

如果此代码位于公共git repo中,请共享链接。

答案 1 :(得分:0)

我知道这个问题已经回答了,但是对我来说,唯一解决此问题的方法是也传递info参数。

答案 2 :(得分:0)

就我而言,我在src文件夹中创建了一个新的Query.js文件,但我使用Query = require('./ resolvers / Query')导入Query并在那里进行了编码。因此,尝试检查路径,我认为问题就在那里。