Express.js中根文件加载后如何为响应方法添加超时跳转功能
问题原因
你写的代码无法运行的核心原因是HTTP协议遵循一次请求对应一次响应的规则,调用res.render('index')之后已经把完整响应返回给了客户端,本次请求的连接已经结束,后续服务端执行的setTimeout内的res.render没有办法再给同一个请求返回第二次响应,所以必然运行失败。
正确实现方案
延时跳转的逻辑需要放在前端页面实现,服务端只负责返回带跳转逻辑的初始页面,具体实现步骤如下:
1. 调整服务端路由
先注册两个路由,分别对应初始页和跳转后的主页:
app.get('/', (req, res) => { // 渲染带跳转逻辑的初始页 res.render('index') }) app.get('/homepage', (req, res) => { // 渲染跳转后的目标主页 res.render('homepage') })
2. 在初始页模板中添加跳转逻辑
有两种常用实现方式,二选一即可:
- 方式一:用meta标签实现无侵入自动跳转,无需写JS
在index模板的<head>标签中添加如下代码:
<meta http-equiv="refresh" content="3; url=/homepage">
其中content属性里的3代表延时3秒跳转,url后面填你要跳转的路由地址。
- 方式二:用JS实现自定义跳转逻辑,适合需要加自定义提示、动画的场景
在index模板的任意位置添加如下JS代码:
<script> setTimeout(() => { window.location.href = '/homepage' }, 3000) </script>
内容的提问来源于stack exchange,提问作者Henry kurbs
相关产品推荐
相关产品推荐

