因此,我有一个接收字符串数组的端点,并且我想用带有请求体参数的Mongoose搜索结果填充另一个数组。我在app.post("/whee", function (req, res)
中的代码是这样的。
var SU = db.model("SignUp", supModel)
var dab = req.body.map(function(x) {
return SU.findOne({"email": x}, function(err, data){
if(err) throw err;
return data;
});
});
console.log(dab);
如果我发送一个请求,当我将dab
打印到控制台时,我得到的是:
[ { _mongooseOptions: {},
mongooseCollection:
{ collection: [Object],
opts: [Object],
name: 'signups',
conn: [Object],
queue: [],
buffer: false },
model:
{ [Function: model]
base: [Object],
modelName: 'SignUp',
model: [Function: model],
db: [Object],
discriminators: undefined,
schema: [Object],
options: undefined,
collection: [Object] },
op: 'findOne',
options: {},
_conditions: { email: 'hello@sample.com' },
_fields: undefined,
_update: undefined,
_path: undefined,
_distinct: undefined,
_collection: { collection: [Object] },
_castError: null } ]
显然,hello@sample.com
是我在请求中发送的数组的一个元素。为简单起见,可以假设该元素已经是我的mongo数据存储中的文档中的一个值。这是怎么呢为什么我收到的是这个乱码而不是我的文件?调用forEach
方法并将结果推入dab
只会呈现一个空数组,考虑到它是一个同步方法,这是有意义的。
关于如何解决这个问题有什么想法吗?
尝试使用async.
https://www.npmjs.org/package/asyncvar SU = db.model("SignUp", supModel);
var dab = [];
async.each(req.body, function(email, callback) {
SU.findOne({"email": email}, function(err, data) {
if (err) {
callback(err);
} else {
dab.push(data);
callback();
}
});
}, function(err) {
console.log(dab);
});