异常过滤器与统一响应
这节要解决什么
学会用 Nest 的 HTTP 异常表达业务错误,让前端拿到稳定、可读的错误信息。
先用大白话
服务端出错分两种感受:
- 没处理好:直接 500,前端只看到「服务器错误」
- 处理好了:该 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。
好习惯
- 业务可预期的错误,用明确的 HTTP 异常,不要全变 500
- 真正的未知错误才留给框架变 500,并在日志里留下堆栈
- 别把数据库内部细节直接回给前端
验收清单
- 会在 Service 里
throw new NotFoundException(...) - 能说出 400 / 401 / 403 / 404 / 500 大概何时用
- 明白「统一错误」是为了前端好处理
下一节 → 练习与验收.md