Express项目API无法调用求助:localhost:3000/abc返回404
问题分析与解决方案
我看了你的代码,问题出在路由挂载的路径匹配上,还有几处语法错误,咱们一步步来理清楚:
核心问题:路由路径的实际映射
你在routes/users.js里定义了router.get("/abc"),但在app.js里是这样挂载这个路由的:
app.use("/users", usersRouter);
这意味着usersRouter里的所有路由都会自动加上/users前缀,所以你定义的/abc接口的实际访问路径是/users/abc,而不是你直接访问的localhost:3000/abc,这就是为什么你访问/abc会返回404。
额外的语法错误
你的app.js里还有一行明显的错误代码:
var user = router("./controller/user");
这里的router变量根本没定义(你只在users.js里定义过router = express.Router(),但app.js里没这个变量),这行代码会直接导致服务器启动报错,而且后面的app.use("/abc", user);也完全无效,因为user变量本身就是错误的。
两种解决方案(按需选择)
方案1:让/abc直接可访问
如果你希望直接通过localhost:3000/abc访问接口,有两种方式:
方式A:修改
app.js里的挂载路径,把usersRouter挂载到/abc:// 把原来的 app.use("/users", usersRouter); 改成 app.use("/abc", usersRouter);同时把
users.js里的路由改成根路径(因为前缀已经是/abc了):router.get("/", (req, res) => { res.json({ connect: "success" }); });方式B:直接在
app.js里定义这个路由(如果这个接口逻辑很简单的话):app.get("/abc", (req, res) => { res.json({ connect: "success" }); });
方案2:保留/users前缀,访问正确路径
如果你本来就想让这个接口属于/users下的子路由,那直接访问localhost:3000/users/abc就能得到正确的响应了,同时记得把app.js里那两行错误的代码删掉:
// 删掉这两行 var user = router("./controller/user"); app.use("/abc", user);
最后提醒一下,修改代码后记得重启Express服务器,不然修改不会生效哦。
内容的提问来源于stack exchange,提问作者Anita
相关产品推荐
相关产品推荐

