我有以下代码:
server.use(function(req, res, next) {
users_db.set(req.user, function(err) { // async call to mongodb
if (err) {
console.error(err);
}
});
}
return next();
});
server.get('/', function(req, res) {
req.user.active = true; // this is a new field in user object
res.send(req.user);
}
});
因此,如您所见,调用users_db.set()
时,req.user
没有active=true
字段。它仅插入server.get()
函数中。
由于呼叫的异步性质,是否有可能在数据库中注册了user.active = true
?
答案 0 :(得分:0)
据我所知(至少在Express中就是这样).get方法接受许多中间件函数。所以我想以下内容可行:
server.get(
'/',
function(req, res, next) {
req.user.active = true; // this is a new field in user object
res.send(req.user);
next();
},
function(req, res, next) {
users_db.set(req.user, function(err) { // async call to mongodb
if (err) {
console.error(err);
}
});
}
return next();
}
);
执行类似的操作,确保在使用users_db.set之前始终填充req.user.active。