Kin*_*ian 13 javascript node.js express graphql
试图创建我的第一个graphQL服务器,这是我到目前为止所写的内容.
https://gist.github.com/tharakabimal/7f2947e805e69f67af2b633268db0406
当我尝试按用户名过滤用户时,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)
也许这会有所帮助!
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)