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
相关产品推荐
相关产品推荐

