后端系统一定会报错。
NestJS 的思路不是“每个 controller 各自 try/catch 一遍”,而是提供统一异常层。
最常见写法:
import {
ArgumentsHost,
Catch,
ExceptionFilter,
HttpException,
} from '@nestjs/common';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
response.status(exception.getStatus()).json({
statusCode: exception.getStatus(),
path: request.url,
timestamp: new Date().toISOString(),
message: exception.message,
});
}
}全局挂载:
app.useGlobalFilters(new HttpExceptionFilter());类比:
系统异常
↓
应急中心接警
↓
统一按标准格式回报
↓
前台/客户端看到一致错误结构这比每个接口自己拼错误 JSON 稳定太多。
更重要的是,NestJS 内置很多 HTTP 异常:
BadRequestExceptionUnauthorizedExceptionForbiddenExceptionNotFoundExceptionConflictException
所以你应该优先抛语义明确的异常,而不是到处 throw new Error('出错了')。