Javascript 请求会话don';不设置post请求
我是node.js的新手,我尝试在Express中实现最简单的授权。我想将Javascript 请求会话don';不设置post请求,javascript,node.js,session,express,Javascript,Node.js,Session,Express,我是node.js的新手,我尝试在Express中实现最简单的授权。我想将req.session.userId设置为数据库中的用户id。我可以使用简单的表单和post请求从数据库中获取用户id,但我不能设置req.session.userId。对我来说,最不可理解的事情是——为什么有时候req.session工作,有时候不工作。 我的解释代码。 在app.js的中: 配置段: app.use(express.session({secret: 'asdads', key: 'sid', cooki
req.session.userId
设置为数据库中的用户id。我可以使用简单的表单和post请求从数据库中获取用户id,但我不能设置req.session.userId
。对我来说,最不可理解的事情是——为什么有时候req.session工作,有时候不工作。
我的解释代码。
在app.js的中:
配置段:
app.use(express.session({secret: 'asdads', key: 'sid', cookie: { maxAge: 600000, httpOnly: false }}));
之后,我通过以下方式处理POST请求:
app.post('/login', routes.authorize);
我的路线。授权:
exports.authorize = function(req, res){
if(req.body){
var login = req.body.login;
var password = req.body.password;
//gET USER FROM DATABASE
db.getUser(login, password, function(err, results){
//ensure that results is correct
console.log(results);
if(err){ res.send("User not found", 500); return;}
//PLACE WITH BUG :)
req.session.userId = results[0].id;
});
}
res.render('login', { title: 'Express!' });
}
我想我不能在这里设置req.session.userId,因为我是通过POST访问这里的。如果我是对的,请帮助我在这里访问req.session
提前感谢。我认为问题在于您在
db.getUser()完成之前立即响应了请求。IIRC快速会话中间件在发送响应时保存会话更改,因此请尝试以下操作:
exports.authorize = function(req, res) {
if (!req.body)
return res.render('login', { title: 'Express!' });
var login = req.body.login;
var password = req.body.password;
db.getUser(login, password, function(err, results) {
if (err)
return res.send("User not found", 500);
req.session.userId = results[0].id;
res.render('login', { title: 'Express!' });
});
}
非常感谢你!我考虑过同步/异步执行,但我只在第二天使用node.js,所以很难捕捉到这样的bug!如果你在这里……:)如何在req.session.userId=results[0].id;?之后重定向??您可以使用重定向。我确实尝试过,但如果在req.session.userId=results[0]之后使用,则无法重定向;这对我很有用。