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

NestJS对不存在用户发起PATCH请求未返回404而是200问题排查

问题根因

你的UsersController中的updateUser方法没有返回或等待usersService.update返回的Promise,导致NestJS内置的异常过滤器无法捕获到业务代码抛出的NotFoundException,因此无法给客户端返回预期的404状态码。

具体原因拆解

  • usersService.update是异步方法,调用后会返回Promise:当目标用户不存在时,该Promise会进入rejected状态,抛出NotFoundException
  • 你当前的updateUser写法仅调用了异步方法,既没有加await等待异步执行结果,也没有把生成的Promise返回给Nest路由处理器。Nest会认为该路由处理逻辑已同步执行完成,直接返回默认的200 OK响应
  • 后台抛出的异常因为没有被捕获,就变成了控制台打印的UnhandledPromiseRejectionWarning,不会传递到客户端

修复方案

两种修改方式二选一即可:

  1. 直接返回异步方法生成的Promise
@Patch('/:id')
updateUser(@Param('id') id: string, @Body() body: UpdateUserDto) {
  return this.usersService.update(parseInt(id), body);
}
  1. 加async/await写法更易读
@Patch('/:id')
async updateUser(@Param('id') id: string, @Body() body: UpdateUserDto) {
  return await this.usersService.update(parseInt(id), body);
}

额外提醒:你代码里的createUser方法也存在同样的问题,当前写法如果创建用户逻辑出错,客户端同样收不到错误响应,也需要按上述方案调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:00:01