GraphQL Apollo 无法为不可空返回 Null [重复]

Posted

技术标签:

【中文标题】GraphQL Apollo 无法为不可空返回 Null [重复]【英文标题】:GraphQL Apollo Cannot Return Null for non-nullable [duplicate] 【发布时间】: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]]
);

【问题讨论】:

【参考方案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。

【讨论】:

成功了!非常感谢。

以上是关于GraphQL Apollo 无法为不可空返回 Null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Apollo GraphQL“不能为不可为空的字段 Mutation.createUser 返回 null”

无法为 mikro orm graphql 中的不可空字段返回 null

Apollo graphql 正在为 mongodb 中的空子文档返回空数据

为啥 Apollo/GraphQL 返回一个不可扩展的对象?

文件上传后返回空对象 - Apollo graphql

有没有办法避免在 Apollo GraphQL 中返回具有空值的键?