我有此代码:
app.post('/api/command', function (req, res, next) {
var clientCommand = req.body.command;
console.log("ClientCommand: ", clientCommand);
if (!req.session.step || req.session.step === EMAIL) {
// find user in db with email
users.findOne({email: clientCommand}, function (err, result) {
if (err) {
return console.log("error: ", err);
}
console.log("result: ", result.email);
// if user exists add user in session
if (result != null) {
req.session.user = result;
}
});//.catch(console.log);
console.log("session outside: ", req.session.user);
// change step to password
req.session.step = PASSWORD;
}
问题是我想在users.findOne(...)之外访问req.session.user。但是输出是:
ClientCommand: example@gmail.com
session outside: undefined
任何帮助将不胜感激。
P.S。另外,我想知道Express-Session的工作原理以及它如何将数据存储在Cookie(或服务器端)中。
答案 0 :(得分:0)
Findone是一个异步命令,由于该命令您无法定义。
即使您会注意到 “外部会话:”优先 只有在“结果:”控制台出现之后。
因此,如果您必须在findone内部移动代码或使用可在其中执行查询的自定义中间件。
在调用路由之前在应用js中使用这种类型的代码
app.use(function(req,res,next){
users.findOne({email: clientCommand}, function (err, result) {
if (err) {
return console.log("error: ", err);
}
console.log("result: ", result.email);
// if user exists add user in session
if (result != null) {
req.session.user = result;
next(); // After setting user , route will call
}else{
next(); // will allow to go to route even if no user found
}
});//.catch(console.log);
})
如果您想在特定的网址上调用它,请使用
app.use(“ [您的网址]”,函数(req,res,next){