ExpressJS如何配置仅根路径/触发重定向,其他路径不生效?
问题原因
Express 里 app.use() 采用前缀匹配规则,只要请求路径以你传入的路径为前缀就会命中对应中间件。所有请求路径天然以 / 开头,所以你写的 app.use("/", 重定向逻辑) 会作用在所有请求上,自然访问 /app/v1 也会被重定向。
解决方法
两种方案都可以实现仅根路径精确匹配触发重定向:
- 方案1:改用精确匹配的路由方法
如果仅需要处理GET类型的根路径请求,直接把app.use替换为app.get即可,app.get这类app.METHOD系列的路由方法默认做精确路径匹配:
// 仅请求路径精确等于 / 时触发 app.get("/", (req, res) => { res.redirect("https://www.google.com"); }); // 额外提示:不要直接把app实例挂载到/app/v1路径下,会导致中间件递归执行,建议拆分路由到独立Router实例 const v1Router = express.Router() // v1版本接口逻辑写在v1Router上 app.use("/app/v1", v1Router);
- 方案2:保留
app.use手动判断路径
如果需要处理根路径下所有HTTP方法的请求,在中间件内判断req.path是否严格等于/即可:
app.use("/", (req, res, next) => { if (req.path === "/") { return res.redirect("https://www.google.com"); } // 非根路径直接放行到后续中间件 next(); }); const v1Router = express.Router() app.use("/app/v1", v1Router);
内容的提问来源于stack exchange,提问作者chichi
相关产品推荐
相关产品推荐

