我正在使用快递和猫鼬。当我使用mocha测试运行此端点时,我有一个奇怪的问题。
exports.broadcastMessages = function(req, res, next) {
User.find({}, function(err, users) {
if(err) return next(err);
var push = function(user, callback) {
user.messages.push(req.body.message);
user.save(function(err) {
callback(err);
});
};
var fin = function(err) {
if (err) {
return next(err);
}
console.log('aaaaaaaaaa');
return res.send('ok');
};
async.each(users, push, fin);
});
};
然后我收到超时错误。只有一个用户。所以这不是时间问题。我确信res.send('ok')被调用了。但是当我删除user.save()时。它起作用了......
exports.broadcastMessages = function(req, res, next) {
User.find({}, function(err, users) {
if(err) return next(err);
var push = function(user, callback) {
user.messages.push(req.body.message);
callback(err);
};
var fin = function(err) {
if (err) {
return next(err);
}
console.log('aaaaaaaaaa');
return res.send('ok');
};
async.each(users, push, fin);
});
};
我不知道为什么。为什么再添加一个user.save()它不起作用?调用res.send但没有响应。
快递的版本是3.4.7。猫鼬是3.8.2。
答案 0 :(得分:0)
当你说“我收到超时错误”时,你的意思是摩卡失败了吗?如果是这样,那么你的mocha测试本身可能无法正确调用done()
。上面的代码看起来不错,我认为它应该可行。一些错误点:
每当你有这种模式时:
user.save(function(err) {
callback(err);
});
您不需要额外的包装函数,除了调用回调之外什么都不做。只是做:
user.save(callback);
此外,循环访问用户并保存每个用户的效率远远低于让mongodb在一个命令中为您完成所有操作:
User.update({}, {$push: {messages: req.body.message}}, function (error) {...});