我正在尝试学习graphql,以便将其应用到React网站。我现在遇到了一些麻烦但是无法弄清楚为什么当我100%确定返回的内容不为空时它会返回null。如果我在解析器中打印results
,它会按预期打印一组用户对象,但是当它返回时,它表示我为字段Query.users
返回null。任何帮助将不胜感激。
Query: { // graphql query resolver
users: function (parent, args, { User }) {
var mongoose = require('mongoose');
var array = [];
mongoose.connect('localhost:27017', function(err){
if(err) throw err;
User.find({}).then(results=>{
console.log(results);
return results;
});
});
}
}
type Query { //query typedef
users: [User]!
}
type User { // graphql schema typedef
_id: String!
username: String!,
email: String!,
joined: String,
interests: [String],
friends: [User]
}
var User = new Schema({ // mongoose schema def
username: !String,
email: !String,
joined: String,
interests: [String],
friends: [[this]]
});
答案 0 :(得分:1)
这是因为您没有在users
函数中返回任何内容。
您可以等待并返回已解决的承诺值,如下所示。试试这个并检查您是否仍然无法从查询中获取用户列表。
users: function (parent, args, { User }) {
return await getUsers()
}
const getUsers = () => {
var mongoose = require('mongoose');
return new Promise((resolve, reject) => {
mongoose.connect('localhost:27017', function(err){
if(err)
reject(err);
User.find({}).then(results=>{
console.log(results);
resolve(results);
});
});
});
}
我添加的代码有ES6,请将其转换为ES5,如果这是您在整个应用中使用的内容。