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

TypeScript环境下Express应用路由请求无响应问题排查

问题原因

和import语法使用不当无关,你的tsconfig.json里开启了esModuleInterop: true,已经兼容了CommonJS模块的默认导入逻辑,所有import写法都是正确的。
路由完全不触发的核心问题是cors中间件注册错误,所有请求卡在cors中间件阶段,没有流转到后续路由处理逻辑。

具体错误

你当前的cors注册代码:

app.use(cors);

cors是一个工厂函数,直接传入函数本身无法生成符合Express规范的中间件,函数执行时不会调用next()把请求传递给下一个处理层,导致所有请求被挂起,永远到不了后面定义的/items路由。

修复方案

把cors的注册改为函数调用形式,和其他中间件的写法保持一致:

// 无特殊跨域配置直接调用即可
app.use(cors());

// 有自定义跨域需求时传入配置对象即可,示例:
// app.use(cors({ origin: 'http://localhost:5173', credentials: true }))

可顺手修复的其他问题

  • 端口配置不一致:你写死了监听3000端口,但启动日志打印的是process.env.SERVER_PORT,如果环境变量配置的端口不是3000,会出现日志和实际监听端口不符的问题,建议统一写法:
    const PORT = process.env.SERVER_PORT || 3000;
    app.listen(PORT, () => {
      console.log(`Server listening on port ${PORT}`);
    });
    
  • 已导入的characterRouter/userRouter/itemsRouter三个路由模块没有注册到app实例上,后续要使用这几个模块的接口时,需要补上对应的app.use()挂载逻辑。
  • tsconfig.json里"skipLibCheck": true这一行末尾多了冗余逗号,部分严格编译场景下会触发报错,可以直接删掉。

验证方法

修改完cors注册逻辑后重启服务,再发起GET localhost:3000/items请求,就能正常看到控制台打印OK,接口返回{ "ok": true }响应。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:18:14