图ql x MongoDB
我试图用graphql和mongoose从mongodb数据库中读取一些数据,但每次查询数据库时,它都返回null,但没有抛出错误。 代码如下:图ql x MongoDB,mongodb,mongoose,graphql,graphql-js,Mongodb,Mongoose,Graphql,Graphql Js,我试图用graphql和mongoose从mongodb数据库中读取一些数据,但每次查询数据库时,它都返回null,但没有抛出错误。 代码如下: // Controller.js exports.user_read = function(id) { return new Promise((resolve, reject) => { Contact.findById(id, function(err, user) { err ? reject(err) : resol
// 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.user\u readid。没有等待,你只是在发回一个承诺。返回时它很可能处于挂起状态,因此返回为null
包括Daniel Rearden关于取消额外承诺的建议,下面是您的代码的外观:// 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)
}
...
您提供的代码似乎没有任何问题,只是不需要将Contact.findById包装在新的承诺中—只要省略回调,它就应该已经返回了承诺。不管怎样,这都不应该是个问题。如果通过调用GraphQL外部的findById可以获得所需的数据,那么问题可能在于GraphQL设置,您应该发布完整的模式和根对象。如果您无法让findById返回任何内容,即使在任何解析器之外,您也需要包括您的联系人模型以及如何连接到数据库。