在已经使用的响应节点js之后重定向

时间:2016-10-17 19:23:42

标签: javascript 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');
});

“完成”被打印然后它会抛出错误,但不会在回调中指定错误。

3 个答案:

答案 0 :(得分:3)

您无法使用此方法 - 使用标头向浏览器发送呈现方式,然后浏览器关闭HTTP请求。你不能发送第二个回复。

您必须在页面上使用JavaScript执行超时逻辑,而不是服务器:

<script>
  var timeout = 3000;

  setTimeout(function () {
     window.location = "http://www.yoururl.com";
  }, timeout);
</script>

答案 1 :(得分:1)

您无法向单个请求发送多个回复。如果有人问你汉堡,你给他们汉堡,他们就走开了。一段时间后,你在他们的后脑勺上翻了另一个汉堡。他们无法抓住它。

在这种情况下,您需要在客户端处理重定向。如果这只是常规页面呈现,则可以使用refresh标记的meta属性。

<meta http-equiv="refresh" content="2; url=http://path/to/my/page/" />

如果这是一个AJAX请求,您需要让客户端在延迟后执行重定向。

答案 2 :(得分:0)

您尝试发送的重定向应该在用户点击服务器时在服务器端完成,或者在404页面加载后在浏览器上完成。