予保持时,我执行我的代码,其具有以下列出的伪码遇到此误差(为了澄清,我的代码是基于反应-Redux的万能-热示例)Express.js会话 - 重定向错误
Error: Can't set headers after they are sent.
[2] at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
[2] at ServerResponse.header (/pathToUI/ui/node_modules/express/lib/response.js:718:10)
[2] at ServerResponse.location (/pathToUI/ui/node_modules/express/lib/response.js:835:8)
[2] at ServerResponse.redirect (/pathToUI/ui/node_modules/express/lib/response.js:874:8)
[2] at api.js:165:11
[2] at Layer.handle [as handle_request] (/pathToUI/ui/node_modules/express/lib/router/layer.js:95:5)
[2] at trim_prefix (/pathToUI/ui/node_modules/express/lib/router/index.js:312:13)
[2] at /pathToUI/ui/node_modules/express/lib/router/index.js:280:7
[2] at Function.process_params (/pathToUI/ui/node_modules/express/lib/router/index.js:330:12)
[2] at next (/pathToUI/ui/node_modules/express/lib/router/index.js:271:10
我试图将用户重定向到主页(/)和用户是已经登录后/家。基本上,会由快递会话的定时器控制。当时间到了,我想将用户重定向到主页(下一次发出请求)。
下面的代码将在api.js file
app.use((req, res, next) => {
if (req.session.user != undefined) {
if(sessionNotOver)
Renew session
}
else if (sessionOver/ expired) {
console.log('expired session');
res.status(403).end('SESSION EXPIRED');
res.redirect('/');
return;
//req.session.destroy();
} else {
console.log('session has no user, but it is: ' + JSON.stringify(req.session));
}
});
我能够正确地保持会话的轨道,但我无法将用户重定向到首页。 你有什么秘诀,我做到这一点?它会更好,我把重定向别的地方(即在server.js?)
我已经试过多次协商计算器的帖子,我也做了很多的谷歌搜索/测试,但似乎没有任何工作。我可能会被误解,虽然东西,所以这将是很好,如果有人可以澄清一些事情和/或给我一些提示。谢谢!
编辑所以我试图改变行西蒙Brandsdorfer下面提到的,但我的应用程序仍然不重定向,现在它只是停留加载屏幕上是显示加载GIF,直到其他计时器另一个组件(在App.js中)超时。
这个错误是因为你要发送res.status(403).END后'另一个响应( '会话已超时');'。一旦调用'end()',你就不能发送另一个响应。请在这里https://stackoverflow.com/a/7086621/7096322 –
“我不能发布隐私的原因码”你的代码没有特殊 – Darkrum
@Darkrum我已经更新了帖子有关代码的基本结构的详细信息。如果你能帮助我,那会很棒。 –