Express.js如何将根路径后除/en、/fr外的所有路径重定向到/en
原有代码问题
- 条件判断存在优先级错误:
!request.params.lang === "fr"实际执行逻辑是(!request.params.lang) === "fr",永远返回false,非法语言参数的判断完全失效 - 赋值误用全等运算符:
request.params.lang === ""是判断语句,不会修改params参数值,也不符合需求逻辑 - 缺少全局兜底路由,无法匹配多级路径、非法路径的请求
修正后代码
// 根路径直接重定向到英文页 app.get("/", (req, res) => { res.redirect("/en"); }); // 单级语言路径匹配 app.get("/:lang", (req, res) => { const validLangs = ["en", "fr"]; // 非法语言参数直接重定向到英文页 if (!validLangs.includes(req.params.lang)) { return res.redirect("/en"); } // 按语言渲染对应页面 res.render("index.ejs", { // 对应语言的翻译配置 }); }); // 全局兜底:所有未匹配到的路径全部重定向到英文页 app.all("*", (req, res) => { res.redirect("/en"); });
注意事项
- 路由必须按上述顺序编写,Express 会从上到下依次匹配路由,顺序颠倒会导致兜底路由提前拦截合法请求
- 该方案会拦截所有/en、/fr之外的所有路径,包括/en/xxx、/fr/xxx这类多级路径,完全符合仅保留两个有效路由的需求
内容的提问来源于stack exchange,提问作者Xeway
相关产品推荐
相关产品推荐

