TypeScript + Express项目路由失效,访问/sessions返回Cannot GET错误
问题原因
你的路由匹配规则重复拼接了路径前缀,导致实际可访问的路由和预期不符:
SessionController中定义了控制器根路径public path = '/sessions'- 注册路由时你又传入了
this.path作为路由路径:this.router.get(this.path, this.getSession) - App 类注册控制器时,执行的是
this.app.use(controller.path, controller.router),相当于给该控制器下所有路由额外加了一层/sessions前缀
三者叠加后,你写的 GET 接口实际可访问路径为 /sessions/sessions,自然访问 /sessions 会返回 404 错误。你可以先尝试访问 GET http://localhost:3999/sessions/sessions,如果能拿到 session 数据就可以确认是该问题。
解决方案
按照控制器模块化的设计逻辑调整路由注册规则即可,把 SessionController 里 intializeRoutes 方法的路由路径改为根相对路径:
public intializeRoutes() { console.log("Route initialised"); // 把原来的 this.path 替换为 '/' this.router.get('/', this.getSession); }
调整后,控制器根路径 /sessions 拼接路由路径 /,最终匹配的路径就是你预期的 /sessions,访问即可触发 getSession 方法返回数据。
补充注意项
你贴出的 controller.interface.ts 存在一处笔误:定义的接口名为 IController,但最后导出写的是 export default Controller,如果本地代码也是这个写法需要修正为 export default IController,否则编译阶段就会报错。
内容的提问来源于stack exchange,提问作者user1452030
相关产品推荐
相关产品推荐

