GraphQL 查询工作,现在返回 null;

Posted

技术标签:

【中文标题】GraphQL 查询工作,现在返回 null;【英文标题】:GraphQL Query worked, now returns null; 【发布时间】:2021-08-25 19:50:03 【问题描述】:

所以我正在尝试 GraphQL,但遇到了一个奇怪的问题。返回 data 的同一查询现在返回 null。 我正在使用数组形式的虚拟“数据库” 当我尝试添加新数组和类型 Authors 时出现此问题。我已删除所有内容以返回初始代码,但它仍然不会从数组中返回正确的数据。

schema.js

    const graphql = require('graphql');
    const _ = require('lodash');
    
    
    const 
        GraphQLObjectType,
        GraphQLID,
        GraphQLString,
        GraphQLSchema
     = graphql;
    
    // dummy data
    var booksarr = [
        name: 'Name of the Wind', genre: 'Fantasy' , id: 1,
        name: 'The Final Empire', genre: 'Fantasy' , id: 2,
        name: 'The Long Earth', genre: 'Sci-Fi' , id: 3
    ];
    
    
    const BookType = new GraphQLObjectType(
        name: 'Book',
        fields: () =>(
            id: type: GraphQLID,
            name: type: GraphQLString,
            genre: type: GraphQLString
        )
    );
    
    
    const RootQuery = new GraphQLObjectType(
        name: "RootQueryType",
        fields: 
            book: 
                type: BookType,
                args:  id:  type: GraphQLID  ,
                resolve(parent, args)
                    //Get data from db / sources
                    return _.find(booksarr,id: args.id);
                
            
        
    );
    
    module.exports = new GraphQLSchema(
        query: RootQuery
    );

app.js

    const express = require('express');
    const graphqlHTTP = require('express-graphql');
    const schema = require('./schema/schema');
    
    
    const app = express();
    
    app.use('/graphql', graphqlHTTP(
        schema,
        graphiql: true
    ));
    
    app.listen(8080,() =>
        console.log("Now listening on port 8080");
    );

【问题讨论】:

【参考方案1】:

您的书单中的 id 是数字类型,将其更改为字符串类型,它将起作用。从 1 到“1”

【讨论】:

这与the other answer 中的解决方案相同。 在回答已有答案的旧问题时,请确保提供新颖的解决方案或比现有答案更好的解释。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

您的查询将ID 作为字符串传递,但在booksarr 中,ID 是一个数字。您的代码需要同时处理这两者,或者您的查询需要传递一个整数。

【讨论】:

ID 类型应该接受 Int 还是 Strings ?我已经通过和 Int 并且它仍然返回 null。 ID 接受字符串和整数,但 _.find 不接受。如果它仍然不起作用,那么您需要调试您的 _.find 代码以查看您得到的参数并查看它为什么不匹配。 换句话说,这将解决它return _.find(booksarr, id: Number(args.id) );

以上是关于GraphQL 查询工作,现在返回 null;的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GraphQL 查询返回 null?

为啥 GraphQL 查询返回 null?

为啥 GraphQL 查询返回 null?

为啥 GraphQL 查询返回 null?

Graphql 查询总是返回 null

在短 GraphQL 查询上返回 null