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,不会传递到客户端
修复方案
两种修改方式二选一即可:
- 直接返回异步方法生成的Promise
@Patch('/:id') updateUser(@Param('id') id: string, @Body() body: UpdateUserDto) { return this.usersService.update(parseInt(id), body); }
- 加
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
相关产品推荐
相关产品推荐

