You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:54:34