NodeJS中Express的/hello GET路由无法执行问题咨询
问题原因及解决方法
核心问题
你遇到的问题是Express Router的路径拼接规则导致的:当你在Router中定义路由路径时,如果路径开头没有加/,Express会把挂载路径和这个路径直接拼接(不会自动补斜杠),导致实际匹配的路径和你预期的不一致。
比如你在main.js中用app.use("/", intro)挂载路由,task.js里的route.get("hello")会被解析成"" + "hello",也就是hello,但你请求的是/hello,两者不匹配,所以返回Cannot GET /hello。
解决方法
给task.js里的所有路由路径加上开头的/即可:
let express = require('express') let route = express.Router(); // 根路径改为 "/" route.get("/",(req,res) => { res.status(200).send("Welcome") }) // hello路径改为 "/hello" route.get("/hello",(req,res) => { res.status(200).send("We are in Hello page") }) module.exports = route
补充说明
当使用app.use(挂载路径, 路由实例)时:
- 如果Router里的路径以
/开头,Express会自动合并挂载路径和路由路径,自动处理重复的斜杠(比如挂载路径是/api,路由路径是/hello,最终匹配/api/hello) - 如果Router里的路径不以
/开头,会直接拼接字符串(比如挂载路径/api+路由路径hello会变成/apihello,这通常不是预期结果)
内容的提问来源于stack exchange,提问作者Brijesh Roy
相关产品推荐
相关产品推荐

