2016-10-17 30 views
1

我想渲染某个页面,并在一定的秒数后需要将其重定向到另一个页面。但是,我收到“发送后无法设置标题”。从我读的内容来看,这个回应应该只用一次,但我不确定这是否属实。我将不胜感激任何帮助或解决这个特定问题。在已经使用的响应之后重定向节点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”被打印出来,然后抛出错误,但不是在回调中指定的错误。

+0

你在你的API上发送res.redirect两次。你最好的选择可能是设置部分404页面 – Brian

回答

2

你不能使用这种方法 - 渲染意味着发送到浏览器的头部,然后HTTP请求被浏览器关闭。您无法发送第二个回复。

你必须做的超时逻辑在JavaScript的网页上,而不是服务器:

<script> 
    var timeout = 3000; 

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

的超时工作就像一个魅力。谢谢 – dlipovac012

+0

太好了,如果你能接受这个答案会很感激。 – 7zark7

0

权当用户点击你要发送重定向应该做到无论在服务器端服务器,或者在404页面加载后在浏览器上完成。

1

您无法向单个请求发送多个回复。就像有人问你一个汉堡,你给他们一个汉堡,然后他们走开了。过了一段时间,你会在他们的脑后再掷一个汉堡。他们不会去捕捉它。

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

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

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