【发布时间】:2017-07-19 23:54:07
【问题描述】:
当我执行具有下面列出的伪代码的代码时,我一直遇到此错误(为了澄清,我的代码基于 react-redux-universal-hot-example)
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
我正在尝试将用户重定向到主页 (/),并且用户在登录后位于 /home。基本上,会话由快速会话中的计时器控制。当时间到了,我想将用户重定向到主页(下次请求时)。
以下代码将位于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?中)
我已经尝试咨询多个 stackoverflow 帖子,并且我还进行了很多谷歌搜索/测试,但似乎没有任何效果。不过,我可能会误解某些东西,所以如果有人能澄清一些事情和/或给我一些提示,那就太好了。谢谢!
编辑所以我尝试按照下面提到的 Shimon Brandsdorfer 更改行,但我的应用程序仍然没有重定向,现在它只是卡在加载屏幕上,这是另一个显示加载 gif 的组件直到另一个计时器(在 App.js 中)超时。
【问题讨论】:
-
此错误是因为您试图在
res.status(403).end('SESSION EXPIRED');之后发送另一个响应。一旦您致电end(),您将无法再次发送回复。在这里查看stackoverflow.com/a/7086621/7096322 -
“出于隐私原因,我无法发布代码”您的代码不特殊
-
@Darkrum 我更新了帖子,提供了有关代码基本结构的更多详细信息。如果你能帮助我,那就太好了。
标签: javascript node.js session express frontend