GraphQL x MongoDB
Posted
技术标签:
【中文标题】GraphQL x MongoDB【英文标题】: 【发布时间】:2017-12-21 04:38:25 【问题描述】:我正在尝试使用 graphql 和 mongoose 从 mongodb 数据库中读取一些数据,但每次查询数据库时它都会返回 @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 返回任何内容,即使在任何解析器之外,您也需要包含您的联系人模型以及您连接到数据库的方式。
【参考方案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)
...
【讨论】:
以上是关于GraphQL x MongoDB的主要内容,如果未能解决你的问题,请参考以下文章