GraphQL"不能为非空值返回null"

Kin*_*ian 13 javascript node.js express graphql

试图创建我的第一个graphQL服务器,这是我到目前为止所写的内容.

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

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

GraphQL出错

UserQueriesQL.js中的users字段中发生错误.

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

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

小智 6

因为我是 GraphQL 的初学者,所以我也遇到了这个问题。单独浏览每个文件后,我发现我忘记导入到我的解析器中

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

const resolvers = [User, **Posts**];
Run Code Online (Sandbox Code Playgroud)

也许这会有所帮助!


p0k*_*k8_ 1

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
}
Run Code Online (Sandbox Code Playgroud)

以前,在args您提供一个object带有嵌套对象的username情况下,

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

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

// args = {username: {name: 'abcd'}}
Run Code Online (Sandbox Code Playgroud)

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

/* searching for username{} object, but
your mongoose schema is username: String */
Run Code Online (Sandbox Code Playgroud)

它与您的数据库字段不匹配,它将始终返回一个空数组[],也与您的 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 }
    })
});
Run Code Online (Sandbox Code Playgroud)