【问题标题】:GraphQL Apollo Cannot Return Null for non-nullable [duplicate]GraphQL Apollo 无法为不可空返回 Null [重复]
【发布时间】:2018-04-10 08:55:26
【问题描述】:

我正在尝试学习 graphql,以便可以将其应用到 React 网站。不过,我现在遇到了一些麻烦,并且无法弄清楚为什么当我 100% 确定返回的内容不为 null 时,它会说返回 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]]
});

【问题讨论】:

    标签: node.js express graphql apollo


    【解决方案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,请将其转换为 ES5。

    【讨论】:

    • 成功了!非常感谢。
    猜你喜欢
    • 2019-10-25
    • 2018-01-28
    • 2021-10-29
    • 2021-11-27
    • 2021-10-24
    • 2020-10-27
    • 2021-08-18
    • 2020-01-28
    • 2022-01-02
    相关资源
    最近更新 更多