gpt4 book ai didi

node.js - session 未存储在 Express for Node.js 中

转载 作者:搜寻专家 更新时间:2023-10-31 23:29:15 25 4
gpt4 key购买 nike

我有以下路线,基本上作用于登录表单中的帖子。问题是当登录成功时(找到成员并且密码匹配),member._id 没有存储在 session 中。

我的路线:

app.post('/signin', function(req, res) {
Member.findOne({username: req.body.username}, function(error, member) {
var matchPassword = crypto.createHmac('sha1', member.salt).update(req.body.password).digest('hex');
if(member.password == matchPassword) {
req.session.member_id = member._id;
res.redirect('/' + member.username);
}
});
res.redirect('/');
});

触发此路由时,我在控制台中收到以下错误:

node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/Users/admin/Node Projects/sandboxProject/node_modules/express/node_modules/connect/lib/patch.js:62:20)
at ServerResponse.header (/Users/admin/Node Projects/sandboxProject/node_modules/express/lib/response.js:280:8)
at ServerResponse.redirect (/Users/admin/Node Projects/sandboxProject/node_modules/express/lib/response.js:413:10)
at Promise.<anonymous> (/Users/admin/Node Projects/sandboxProject/app.js:109:8)
at Promise.<anonymous> (/Users/admin/Node Projects/sandboxProject/node_modules/mongoose/lib/promise.js:120:8)
at Promise.<anonymous> (events.js:64:17)
at Promise.emit (/Users/admin/Node Projects/sandboxProject/node_modules/mongoose/lib/promise.js:59:38)
at Promise.complete (/Users/admin/Node Projects/sandboxProject/node_modules/mongoose/lib/promise.js:70:20)
at /Users/admin/Node Projects/sandboxProject/node_modules/mongoose/lib/query.js:1087:15

它似乎不喜欢“res.redirect('/' + member.username);”在“req.session.member_id = member._id;”之后。这是因为它所在的 Mongoose findOne 回调的异步性质吗?我已尝试从回调中删除 res.redirect,但未存储 session 数据,当我将其保留在那里时,出现“ header 已发送”错误。

我的配置:

app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.cookieParser());
app.use(express.session({ secret: "blahblah" }));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});

最佳答案

我遇到了类似的问题。尽管我的问题是当我从 session 中删除某些内容时,例如delete req.session.user,它在重新加载和 Node 应用程序重新启动后仍然存在。它只会在 req.session.destroy() 之后消失。

我查看了 Node 的 session middleware docs发现他们有一个Session#save()方法。所以我在 session 对象操作之后执行了 req.session.save() 并且它确实解决了我的问题。尝试一下,看看它是否能解决您的问题。

关于node.js - session 未存储在 Express for Node.js 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10896025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com