Node.js Express PUT请求Postman一直发送无响应但数据库更新正常
Express PUT接口请求挂起问题记录
问题现象
- 基于Node.js + Express开发RESTful API时,除用户信息更新PUT接口外,其余所有接口功能正常
- 调用PUT接口时Postman一直卡在「sending request」状态,无响应返回,但数据库实际已经执行完成更新操作
- 前期排查重点放在响应返回逻辑,尝试了所有已知的响应写法均未修复问题
相关代码
路由层
router.put('/:id', hlpJWT.authenticateToken, ctrProfile.updateInfo);
控制器层
updateInfo = async function (req, res, next) { const input = { name: req.body.name, password: await srvAuth.cryptPass(req.body.password), ..., // 其余入参字段 }; let user = await srvProfile.updateProfile(input); if (user) res.json(user); else { res.status(404); res.json({ error: "user not found" }); } };
服务层
updateProfile = function (input) { return new Promise((resolve, reject) => { query( "UPDATE users SET ? WHERE ?", [ { name: input.name, ... // 其余更新字段 }, { user_id: input.id }, ], function (error, result) { if (error) { return reject(error); } return resolve(result); } ); }); };
问题解决结论
最终将Express升级到v5版本后问题完全修复,确认根因和框架错误处理机制有关,但未定位到具体触发点。
补充说明:Express v4 原生不支持异步函数的错误自动捕获,只要async控制器/路由中出现未被
try/catch显式捕获的异常,请求就会被挂起,不会返回任何响应,这也是这类「操作执行成功但请求卡住」问题的高频诱因。Express v5 原生支持异步错误捕获,会自动将异步逻辑抛出的异常传递给全局错误处理中间件,从根本上避免这类请求挂死的问题。
内容的提问来源于stack exchange,提问作者HelplessStudent88
相关产品推荐
相关产品推荐

