将 Bluebird Promisifyall 与 Mongoose 结合使用
Using Bluebird Promisifyall with Mongoose
我正在使用 mongoose 和 Bluebird promisifyall,如下所示:
var mongoose = require('bluebird').promisifyAll(require('mongoose'))
我想使用以下方法从 mongo 检索文档:
// Gets a list of Posts
exports.index = function(req, res) {
console.log(req.query);
Post.findAsync()
.whereAsync({author: req.query.id})
.execAsync()
.then(function(entity) {
if (entity) {
res.status(statusCode).json({
status_code: statusCode,
data: entity
});
}
})
.catch(function(err) {
res.status(200).json({
status_code: statusCode,
message: 'error occured',
errors: err
});
});
};
但它只是挂起,我是不是做错了什么?
非常感谢将 bluebird 的 promisifyall 与 mongoose 一起使用的任何帮助,谢谢 :)
find
和 where
不是异步的,它们不接受回调。所以不要使用它们的 …Async
变体 - 你不希望它们 return 一个承诺,你想要一个猫鼬查询对象。
尝试
Post.find().where({author: req.query.id}).execAsync()
.then(…)
.…
顺便说一句,如果 entity
是假的,你的请求会挂起,在这种情况下你永远不会写回复。考虑添加 else
和 throw new Error("no entity")
.
我正在使用 mongoose 和 Bluebird promisifyall,如下所示:
var mongoose = require('bluebird').promisifyAll(require('mongoose'))
我想使用以下方法从 mongo 检索文档:
// Gets a list of Posts
exports.index = function(req, res) {
console.log(req.query);
Post.findAsync()
.whereAsync({author: req.query.id})
.execAsync()
.then(function(entity) {
if (entity) {
res.status(statusCode).json({
status_code: statusCode,
data: entity
});
}
})
.catch(function(err) {
res.status(200).json({
status_code: statusCode,
message: 'error occured',
errors: err
});
});
};
但它只是挂起,我是不是做错了什么? 非常感谢将 bluebird 的 promisifyall 与 mongoose 一起使用的任何帮助,谢谢 :)
find
和 where
不是异步的,它们不接受回调。所以不要使用它们的 …Async
变体 - 你不希望它们 return 一个承诺,你想要一个猫鼬查询对象。
尝试
Post.find().where({author: req.query.id}).execAsync()
.then(…)
.…
顺便说一句,如果 entity
是假的,你的请求会挂起,在这种情况下你永远不会写回复。考虑添加 else
和 throw new Error("no entity")
.