【问题标题】:GraphQL "Cannot return null for non-nullable" [duplicate]GraphQL“不能为非空返回空”[重复]
【发布时间】:2017-07-13 12:52:13
【问题描述】:

尝试制作我的第一个 graphQL 服务器,这是我目前所写的。

https://gist.github.com/tharakabimal/7f2947e805e69f67af2b633268db0406

当我尝试按用户名过滤用户时,GraphQL 上会弹出以下错误。

Error on GraphQL

错误发生在 UserQueriesQL.js 中的用户字段中。

我在解析函数上传递参数的方式有什么问题吗?

user: {
type: UserType,
args: { 
  username: {
    name: 'username',
    type: new GraphQLNonNull(GraphQLString)
  }
},
resolve: function(parentValue, args) {
  return User.find( args ).exec();
}

【问题讨论】:

  • 该错误意味着您正在返回null,但使用type: new GraphQLNonNull(GraphQLString),您声明可能永远不会返回用户名null。要么返回 null 以外的其他内容,要么将类型声明为 type: new GraphQLString()
  • User.find 将解析为一个数组,但 GraphQL 期望的是一个对象。请参阅this answer 中的常见场景 #2。

标签: javascript node.js express graphql


【解决方案1】:

由于我是 GraphQL 的初学者,我什至遇到了这个问题。单独浏览每个文件后,我发现我忘记导入我的解析器

import User from './User';
**import Post from './Post';**

const resolvers = [User, **Posts**];

也许这会有所帮助!

【讨论】:

    【解决方案2】:
    user: {
    type: UserType,
    args: { 
      username: { type: new GraphQLNonNull(GraphQLString) }
    },
    resolve: function(parentValue, args) {
      return User.find( args ).exec(); // User.find({username: 'some name'}).exec(); 
    // will work as matches your mongoose schema
    }
    

    以前,在args 中,您提供了一个带有嵌套对象usernameobject 所以,

    args: {  // this won't match your mongoose schema field as it's nested object
      username: {
        name: 'username',
        type: new GraphQLNonNull(GraphQLString)
      }
    }
    

    所以当用户查询并提供参数时 你的参数是{ username: { name: 'abcd' } }

    // args = {username: {name: 'abcd'}}
    

    resolve() 正在执行User.find({username: {name: 'abcd'}}).exec();

    /* searching for username{} object, but
    your mongoose schema is username: String */
    

    与您的数据库字段不匹配,它将始终返回一个空数组[],也与您的 GraphQL 字段类型不匹配,因为它是 GraphQLNonNull

    查看gist 后,问题出在rootquery

    问题在于 rootquery

    let RootQuery = new GraphQLObjectType({
        name: 'RootQueryType',
        fields: () => ({
            users: { type:UserQueries.users, resolve: UserQueries.users }
            user: { type: UserQueries.user, resolve: UserQueries.user }
        })
    });
    

    【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2018-01-28
    • 2018-04-10
    • 2014-02-25
    • 2018-07-13
    • 2019-10-25
    • 2019-05-28
    • 2017-11-22
    • 2019-07-08
    相关资源
    最近更新 更多