在Express + Node.js中,重定向是否可以跟随呈现?

3

我有一个使用情景,需要先进行渲染,然后进行重定向。渲染应该使用继承视图模型来通知用户交易成功,然后重定向到主页。以下是所需代码:

router.post('/posturi', function(req, res, next) {
   //Call few services
   if(err){ 
     return res.render('/errorpage')
   }
   res.render('/transaction page');
   //TimeOut function goes here
   res.redirect('/home');
});

一种方法是在Next.js中插入中间件,但这似乎不是最佳方式。如果有其他方法,请告诉我。


你可以使用 setTimeout 在客户端完成这个操作。 - agconti
2个回答

4
如其他人所说,当使用302状态时,您无法同时进行重定向和呈现内容。但是,您可以返回带有呈现内容的200状态,然后在页面本身中使用<meta>标记或setTimeout()来执行重定向。这将短暂显示内容(以您想要设置的时间为准),然后重定向到新页面。
例如,您可以将以下内容放置在实际页面内容中,以便浏览器在显示内容后执行重定向:
<script>
setTimeout(function() {
    window.location.replace("http://whatever.com/newpage.html")
}, 2000);
</script>

或者这个:
<meta http-equiv="refresh" content="2;url=http://whatever.com/newpage.html">

3
不行。这是因为redirectrender都会发送它们的头部并结束响应。在内容被发送后,您无法发送头部。

1
(同样的原因,为什么不能调用两次渲染函数。) - user2864740

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接