Express中使用307重定向POST请求时报Cannot GET /Try错误如何解决
根因分析
307 临时重定向的标准规范明确要求重定向过程中不得修改原始请求的方法与请求体,两个场景表现不一致的核心原因是原始请求方法不同:
- 其他能正常运行的场景中,你是在POST类型的路由逻辑内调用
res.redirect(307, '/Try'),原始请求为POST,重定向后会保留POST方法,匹配你声明的router.post('/Try')路由规则 - 本次报错的场景是在
GET /的路由逻辑内触发重定向,原始请求为GET,重定向后会保留GET方法,你未声明对应的GET /Try路由,因此返回Cannot GET /Try错误
可用解决方案
- 方案一:修改路由适配多请求方法
若/Try接口逻辑不需要严格限制请求方法,直接将路由定义修改为router.all('/Try', try_controller.Try),即可同时支持GET、POST等所有请求类型 - 方案二:调整重定向实现模拟POST请求
若业务要求/Try仅接收POST请求,可替换当前的重定向逻辑:返回一个包含自动提交表单的临时页面,表单method属性设为POST、action属性设为/Try,页面加载完成后自动触发表单提交,即可正常发起POST请求到目标接口 - 方案三:新增GET路由适配
若业务逻辑允许/Try接收GET请求,直接新增router.get('/Try', try_controller.Try)路由规则即可解决报错
内容的提问来源于stack exchange,提问作者user16802669
相关产品推荐
相关产品推荐

