Express中使用redirect跳转时报ERR_TOO_MANY_REDIRECTS错误如何解决
错误产生原因
- 核心原因是相对路径重定向触发了路由循环:你当前使用的
response.redirect('test.html')属于相对路径跳转,当你访问/rand/[随机数值]时,相对路径会基于当前路由前缀拼接,最终跳转目标为/rand/test.html。而你定义的路由规则/rand/:value中的:value是通配参数,可以匹配任意字符串段,因此/rand/test.html会再次命中该路由,触发新一轮重定向,无限循环后就会抛出ERR_TOO_MANY_REDIRECTS错误。 - 附加触发场景:如果
test.html的页面逻辑中会自动发起/rand/:value的fetch请求,fetch默认会自动跟随重定向响应,也会拉长循环请求链,加速报错触发。
解决方法
- 优先使用绝对路径重定向:将重定向路径改为以
/开头的绝对路径,直接从站点根目录解析目标地址,不会拼接当前路由前缀,自然不会再匹配/rand/:value规则,修改后代码如下:
app.get('/rand/:value', (request, response) => { response.redirect('/test.html'); });
- 调整fetch接口的响应逻辑:如果该路由是专门供fetch请求调用的,不需要服务端直接触发页面重定向,可以改为返回JSON格式的跳转地址,由前端手动控制页面跳转,避免fetch自动跟随重定向导致的循环,示例代码如下:
// 服务端路由修改 app.get('/rand/:value', (request, response) => { response.json({ code: 0, redirectUrl: '/test.html' }) }); // 前端fetch逻辑修改 fetch(`/rand/${randomValue}`) .then(res => res.json()) .then(res => { if(res.redirectUrl) window.location.href = res.redirectUrl })
- 给路由参数增加匹配限制:如果需要保留相对路径跳转逻辑,可以给
:value参数增加正则匹配规则,比如限定仅匹配数字,避免test.html这类非数字字符串命中路由,示例代码如下:
// 仅当:value为纯数字时才会命中该路由 app.get('/rand/:value(\\d+)', (request, response) => { response.redirect('test.html'); });
内容的提问来源于stack exchange,提问作者A444433232
相关产品推荐
相关产品推荐

