我有一个简单的查询,总是为null
提供err
的值,我无法弄清楚原因。这是我的代码:
async.series([
function(callback){
User.findOne({ email : req.body.email }, function(err, data) {
console.log('email address' + req.body.email); // shows 'me@example.com'
console.log('err = ' + err); // always shows 'null'
success = err ? false : true;
// do stuff
});
callback();
},
function(callback){
var updateData = {
reset_key: random
};
User.update({ email: req.body.email}, updateData, function(err,data) {
callback();
});
}
], function(err){
if(!err) {
res.json({ success: success });
}
});
架构:
var userSchema = mongoose.Schema({
firstname : String,
lastname : String,
email : String,
created : {
type: Date,
default: Date.now
},
reset_key : String
});
只要输入数据库中已存在的电子邮件地址,async
中的第二个函数调用就会一直成功。但是,async
中的第一个函数调用总是告诉我err
是null
,无论我是否输入数据库中存在的电子邮件地址。为什么?我究竟做错了什么?
答案 0 :(得分:1)
function
中的每个series
都需要传递最后err
的任何function
来接收它们:
function(callback){
User.findOne({ email : req.body.email }, function(err, data) {
// ...
callback(err);
});
}
function(callback){
// ...
User.update({ email: req.body.email}, updateData, function(err,data) {
callback(err);
});
}
未向err
提供callback
,async.series()
并未发现任何err
正在发生。
答案 1 :(得分:0)
使用findOne查找没有结果不是错误条件,因此不会设置错误。如果您尝试确定查询是否返回了结果,则不能将err用于此目的。
相反,你可以检查数据中是否有任何内容 - 如果findOne()没有返回任何结果,它将为空。