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

Node.js+Express+MongoDB API中GET /api/posts请求失败求助

解决GET /api/posts 404错误的方案

出现"Cannot GET /api/posts"错误,核心原因是请求路径没有匹配到对应路由,结合你提供的代码,从以下几个方向排查:

1. 检查路由路径与挂载前缀的重复问题

你的PostController中定义了path = '/posts',并在初始化路由时用this.router.get(${this.path}, this.get)注册了GET路由。如果主app挂载该controller的router时已经指定了/api/posts前缀,就会导致实际路由变成/api/posts/posts,自然匹配不到/api/posts。

修复方式:

修改controller的路由注册代码,将路径改为根路径(空字符串或/):

private initialiseRoutes(): void {
    // 原代码:this.router.get(`${this.path}`, this.get);
    this.router.get('/', this.get); // 改用根路径
}

这样当主app以app.use('/api/posts', postController.router)挂载时,GET请求/api/posts就能正确匹配到该路由。

如果主app挂载的是/api前缀(比如app.use('/api', postController.router)),那原代码的路由注册是正确的,此时需要确认挂载代码是否正确执行。

2. 确认路由注册顺序

Express的路由匹配是按注册顺序执行的,如果在PostController的路由之前,有通配符路由(如app.use('*', ...))或其他匹配/api/posts的路由,会导致请求被提前拦截。确保PostController的路由注册在这些路由之前。

3. 验证Controller的实例化与挂载

检查主app文件中是否正确初始化并挂载了PostController:

import PostController from './path/to/post.controller';

const app = express();
// 初始化controller
const postController = new PostController();
// 挂载到正确的前缀下
app.use('/api', postController.router);

额外排查技巧

可以在controller的路由注册方法中添加日志,确认路由是否被正确加载:

private initialiseRoutes(): void {
    console.log(`已注册GET路由:${this.path}`);
    this.router.get(`${this.path}`, this.get);
}

启动服务后查看控制台输出,确认路由是否成功注册。


内容的提问来源于stack exchange,提问作者Oogrim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:55