【问题标题】:GraphQL x MongoDBGraphQL x MongoDB
【发布时间】:2017-12-21 04:38:25
【问题描述】:

我正在尝试使用 graphqlmongoosemongodb 数据库中读取一些数据,但每次查询数据库时它都会返回 @987654321 @ 但不会引发错误。 代码如下:

// Controller.js
exports.user_read = function(id) {
  return new Promise((resolve, reject) => {
    Contact.findById(id, function(err, user) {
      err ? reject(err) : resolve(user);
    }
  });
}

// Resolver.js
var contact = require('Controller');
...
// root object passed as rootValue to graphqlHTTP
getUser: ({ id }) => { 
  contact.user_read(id)
}
...

任何提示和帮助将不胜感激。 附言这似乎也发生在我所有在controller.js 文件中采用相同Promise 格式的查询中。

【问题讨论】:

  • 您提供的代码似乎没有任何问题,只是您不需要将 Contact.findById 包装在新的 Promise 中——它应该已经返回了一个 Promise只要你省略回调。无论哪种方式,这都不应该是一个问题。如果您可以通过调用 findById outside GraphQL 获得所需的数据,那么问题可能出在您的 GraphQL 设置上,您应该发布完整的架构和根对象。如果您无法让 findById 返回任何内容,即使在任何解析器之外,您也需要包含您的联系人模型以及您连接到数据库的方式。

标签: mongodb mongoose graphql graphql-js


【解决方案1】:

您需要await contact.user_read(id)。没有等待,你只是发回一个 Promise。它很可能在返回时处于挂起状态,因此返回 null

包括 Daniel Rarden 建议摆脱额外的 Promise,您的代码如下所示:

// Controller.js
exports.user_read = async id => {
  return Contact.findById(id, (err, user) => {
      err ? reject(err) : resolve(user);
  });
}

// Resolver.js
var contact = require('Controller');
...
// root object passed as rootValue to graphqlHTTP
getUser: ({ id }) => { 
  return await contact.user_read(id)
}
...

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 2018-05-20
    • 2016-11-21
    • 2020-06-18
    • 2020-12-14
    • 2018-08-25
    • 2018-08-25
    • 2018-06-27
    • 2021-03-30
    相关资源
    最近更新 更多