spring的技术笔记
学习Nest核心第 12 / 23 篇2 分钟阅读

异常过滤器与统一响应

异常过滤器与统一响应

这节要解决什么

学会用 Nest 的 HTTP 异常表达业务错误,让前端拿到稳定、可读的错误信息。

先用大白话

服务端出错分两种感受:

  1. 没处理好:直接 500,前端只看到「服务器错误」
  2. 处理好了:该 404 就 404,该 401 就 401,body 里有清楚的 message

Nest 里常用:

throw new NotFoundException('书签不存在')
throw new UnauthorizedException('请先登录')
throw new BadRequestException('邮箱已注册')

框架会转成对应状态码和 JSON。
这比自己到处 res.status(404).json(...) 更统一(你在 Express 阶段手写过类似逻辑)。

异常过滤器:可以自定义「最终返回长什么样」。入门阶段用内置异常就够;主项目里如有简单的统一格式,对照着看即可。

对着项目看

在 Service 里搜索 throw new:

  • 找不到资源 → NotFoundException
  • 没权限碰别人的书签 → ForbiddenException
  • 登录失败 → UnauthorizedException

前端只要按状态码分支:401 去登录页,404 提示不存在,400 展示 message。

好习惯

  1. 业务可预期的错误,用明确的 HTTP 异常,不要全变 500
  2. 真正的未知错误才留给框架变 500,并在日志里留下堆栈
  3. 别把数据库内部细节直接回给前端

验收清单

  • 会在 Service 里 throw new NotFoundException(...)
  • 能说出 400 / 401 / 403 / 404 / 500 大概何时用
  • 明白「统一错误」是为了前端好处理

下一节 → 练习与验收.md