簡體   English   中英

GraphQL 查詢返回錯誤“不能為不可為空的字段返回空值”

[英]GraphQL query returns error "Cannot return null for non-nullable field"

我有一個基本的 GraphQL 查詢設置,如下所示:

查詢.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"
      ]
    }
  ]
}

似乎是什么導致了這個錯誤?

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

但是,當我將 Query 轉換為類似{}它會返回相同的錯誤,因此請檢查您的路徑和 console.log Query 以驗證路徑。 您的導出看起來正確,但您可能忘記保存文件,正如我從課程入門文件中看到的那樣 Query is an {} 請仔細檢查。

此外,如果此代碼位於公共 git 存儲庫中,請分享鏈接。

我知道這個問題已經得到回答,但對我來說,解決這個問題的唯一方法是同時傳遞 info 參數。

就我而言,我在 src 文件夾中創建了一個新的 Query.js 文件,但我使用 Query = require('./resolvers/Query') 導入 Query 並在那里編碼。 所以,嘗試檢查路徑,我認為問題出在那里。

此問題來自 AWS 要求 dynamoDB 表中的某些標准值,例如 createdAt 和 updatedAd,只需在 dynamo db 中手動添加帶有時間戳的這些字段以進行進一步測試。 總是需要通過 id 請求突變,當我的架構是由放大代碼生成創建時,這對我來說並不清楚......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM