在已经使用的响应节点js之后重定向
Redirect after already used response Node js
我想呈现一些页面,经过一定数量的秒后,它需要重定向到另一个页面。然而,我得到一个"不能设置头后,他们被发送。"从我读到的内容来看,回复应该只使用一次,尽管我不确定这是否正确。对于这个特殊问题,我将非常感谢任何帮助或解决方案。
app.get('/', function (req, res) {
var message = req.flash();
res.render('index', { message: req.flash('message'), hassError: message.length > 0} );
});
app.get('/error', function (req, res) {
var timeout = 3000;
setTimeout(function (err) {
console.log('finished');
if (err)
throw err;
console.log('################');
res.redirect('/');
}, timeout);
res.render('partials/404');
});
"finished"被打印出来,然后抛出错误,但不是callback中指定的err。
你不能使用这种方法-渲染意味着发送给浏览器头,然后HTTP请求被浏览器关闭。你不能发送第二个响应。
您必须在页面上使用JavaScript执行超时逻辑,而不是服务器:
<script>
var timeout = 3000;
setTimeout(function () {
window.location = "http://www.yoururl.com";
}, timeout);
</script>
您不能对单个请求发送多个响应。就像有人问你要汉堡,你给了他们一个汉堡,他们就走开了。过了一段时间,你又朝他们的后脑勺扔了一个汉堡。他们不会抓住它的。
在这种情况下,您需要在客户端处理重定向。如果这只是一个常规的页面呈现,你可以使用meta
标签的refresh
属性。
<meta http-equiv="refresh" content="2; url=http://path/to/my/page/" />
如果这是一个AJAX请求,您需要让客户端在延迟后执行重定向。
您尝试发送的重定向应该在用户点击服务器时在服务器端完成,或者在404页面加载后在浏览器上完成。
相关文章:
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 节点.js将变量显示为 HTML
- 如何解决'窗口未定义'终端上的节点JS出错
- S3文件上传文件对象使用节点js
- 在节点 js 中使用护照本地模块验证(登录)密码时出错
- 嵌套的promise节点js
- 使用节点JS发送电子邮件
- 节点JS重定向循环
- 起始节点.js用于并行的线程池
- 获取图像节点js的主色
- 调整节点js中的图像大小
- 节点JS express和控制台输出到命令行与浏览器
- 节点JS:时间机器坏了——timekeeper.travel不做时间旅行
- 如何访问日期并将其插入数据库?节点.JS&MongoDB
- 节点.js快速删除 req.body 不起作用
- 节点.js中的嵌套异步操作
- 如何在核心php应用程序中使用节点js json Web令牌库
- 使用节点js的Bootstrap和Jquery
- 节点.js加密输入/输出类型
- 节点.js在不可能的地方打印“未定义”