2017-02-23 100 views
2

试图制作我的第一个graphQL服务器,这是我迄今为止写的。当我尝试通过用户名来过滤用户GraphQL“不能返回null为非空”

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

跟踪误差上GraphiQL弹出。

Error on GraphiQL

该错误发生于在UserQueriesQL.js用户字段。

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

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

错误意味着你返回'null',但是用'type:new GraphQLNonNull(GraphQLString)'你声明用户名可能永远不会返回'null'。要么返回别的不是'null',要么声明类型为'type:new GraphQLString()' – marktani

回答

0
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您提供的是一个object与嵌套对象username所以,

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

所以当用户查询,并提供ARGS然后 你ARGS将{ 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 } 
    }) 
}); 
+0

我做了建议的更改,但仍有问题 https://gist.github.com/tharakabimal/c84ff21d6a6aa898cb3ccc02757867df –

+0

你在参数 –

+0

中输入用户名是https://gist.github.com/tharakabimal/1883dcb50322456fe81d37e9abc22daa –