Express重定向传参时出现Cannot GET路由访问报错如何解决
报错根因
三个核心问题导致404错误:
- URL拼接规则错误:查询参数的起始标识是
?,错误使用路径分隔符/拼接参数,会把查询参数变成路径的一部分,服务端没有注册/verified/error=true&message=xxx对应的路由,自然返回找不到资源的错误。 - 路由逻辑缺失:原有路由没有读取查询参数的逻辑,即使URL格式正确,渲染页面时也无法拿到传递的提示信息。
- 参数传递未做转义:直接拼接字符串作为URL参数,遇到特殊字符、空格、中文时会出现参数截断、乱码问题。
修复方案
- 修正重定向代码的URL格式,路径和查询参数之间用
?分隔,多参数之间用&分隔,同时对参数内容做URL转义:
let message = "An error occurred while updating user record to show verified." // 注意:路径和参数间用?分隔,参数用encodeURIComponent转义 res.redirect(`/verified?error=true&message=${encodeURIComponent(message)}`)
*注:原代码中ocoured、ahow为拼写错误,已同步修正为正确拼写occurred、show。
- 修正/verified路径的路由逻辑,从请求的query对象中读取传递的参数,注入到渲染的模板中:
app.get("/verified", (req, res) => { // 从查询参数中解构出error和message const { error, message } = req.query; // 将参数传给前端模板使用 res.render("auth-verified-email", { error, message }); })
报错对应说明
触发的报错信息:
Cannot GET /verified/error=true&message=Link%20has%20expired%20.Please%20sign%20up%20again
就是错误拼接URL后,请求路径和注册的路由不匹配触发的标准404响应,按上述方案修改后即可正常传递参数完成跳转。
内容的提问来源于stack exchange,提问作者Badr-Eddine El mostaine
相关产品推荐
相关产品推荐

