Express访问/user路由返回URL异常问题咨询
问题1:访问/user时req.url显示为/的原因
你使用app.use('/user', ...)挂载中间件时,Express会自动将匹配到的挂载路径前缀(/user)从req.url中移除,仅保留相对于挂载点的路径部分。因此访问/user时,该中间件内的req.url会变成/。
如果需要获取完整的原始请求URL,可替换为req.originalUrl,修改代码如下:
app.use("/user", (req, res, next) => { res.send(`<h1>Route is : ${req.originalUrl}</h1>`); });
若要精确匹配/user路径且保留req.url的原始值,建议改用app.get(对应HTTP GET方法)或其他HTTP方法路由,这类路由是精确路径匹配,不会修改req.url:
app.get("/user", (req, res, next) => { res.send(`<h1>Route is : ${req.url}</h1>`); });
问题2:/user路由表现异常、/users被第二个中间件处理的原因
Express中app.use的字符串路径遵循路径段前缀匹配规则:/user只会匹配完全等于/user,或以/user/开头的路径(比如/user/profile)。
而/users与/user属于不同的路径段,不会被第一个app.use("/user")匹配,最终会被第二个app.use("/")(匹配所有路径)处理,此时req.url为完整的/users,所以返回结果如你所见。
你认为/user路由“无法正常工作”是误解——它实际是正常匹配的,只是req.url的表现符合Express挂载中间件的规则。
内容的提问来源于stack exchange,提问作者Naresh M
相关产品推荐
相关产品推荐

