Node.js REST API无响应,中间件未触发问题排查求助
排查Node.js REST API无响应/中间件未触发问题
1. 核查路由注册逻辑
- 确认路由文件是否通过
app.use()正确挂载到index.ts中,挂载路径需与请求URL完全匹配 - 检查请求的HTTP方法(如POST/GET)是否和路由定义一致,比如登录接口通常用POST,若前端发GET请求会因路由不匹配导致无响应
- 排查路由前置中间件:若中间件未调用
next(),会直接阻塞请求流转
2. 校验asyncErrorHandler的错误处理逻辑
- 确保异步错误捕获后正确调用
next(err),否则错误无法传递到Express错误处理流程,请求会一直挂起
错误示例(未传递错误):
正确写法:const asyncErrorHandler = (fn: ControllerType) => { return (req, res, next) => { fn(req, res, next).catch(err => console.log(err)); // 未调用next(err) } }const asyncErrorHandler = (fn: ControllerType) => { return (req, res, next) => { fn(req, res, next).catch(err => next(err)); } }
3. 检查login控制器的异步流程与响应逻辑
- 确认控制器内所有异步操作(如数据库查询)都添加了
await,未等待Promise完成会导致函数提前结束但未发送响应 - 必须调用
res.send()/res.json()/res.end()等方法返回响应,否则请求会一直处于等待状态 - 若
console.log未打印,说明请求根本没进入控制器,需回溯路由匹配和中间件流转环节
4. 梳理Express中间件执行顺序
- 确保
express.json()等请求体解析中间件挂载在路由之前,否则req.body为空可能导致后续逻辑阻塞 - 排查全局中间件(如认证、日志中间件)是否错误拦截请求且未调用
next()
5. 验证服务器启动与请求地址
- 确认
index.ts中正确调用app.listen(),且监听端口未被其他进程占用 - 检查请求URL的端口、域名是否与服务器配置一致,地址不匹配会导致前端显示加载但无实际请求到达
6. 确认全局错误处理中间件存在
- 必须注册四参数的全局错误处理中间件,否则异步错误无法被捕获,请求会挂起:
app.use((err: Error, req: Request, res: Response, next: NextFunction) => { console.error(err.stack); res.status(500).json({message: 'Internal Server Error'}); });
内容的提问来源于stack exchange,提问作者Kapil
相关产品推荐
相关产品推荐

