GraphQL Apollo无法为非空值返回Null

时间:2017-10-29 05:58:09

标签: node.js express graphql apollo

我正在尝试学习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]]
});

1 个答案:

答案 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,如果这是您在整个应用中使用的内容。