首页 > 解决方案 > GraphQL 查询返回错误“不能为不可为空的字段返回 null”

问题描述

我有一个基本的 GraphQL 查询设置,如下所示:

查询.js:

const Query = {
    dogs(parent, args, ctx, info) {
        return [{ name: 'Snickers' }, { name: 'Sunny' }];
    },
};

module.exports = Query;

架构.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"
      ]
    }
  ]
}

似乎是什么导致了这个错误?

标签: javascriptnode.jsgraphql

解决方案


这个问题来自 AWS 要求 dynamoDB 表中的某些标准值,例如 createdAt 和 updatedAd,只需在 dynamo db 中手动添加这些字段并带有时间戳以便进一步测试。总是需要通过 id 请求突变,当我的架构是由放大代码生成创建时,我不清楚这一点......


推荐阅读