如果要完全自订 exception, 就需要自己撰写 class 实作 ExceptionFilter 接口
新增 httpexception.filters.ts
- import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
- import { HttpException } from '@nestjs/common';
- @Catch(HttpException) // 指定 Catch HttpException
- export class HttpExceptionFilter implements ExceptionFilter {
- catch(exception: HttpException, host: ArgumentsHost) { // 预设传入 HttpException, 及 ArgumentHost 对象
- const ctx = host.switchToHttp(); // ArgumentsHost 是个 Wrapper, 包含 request,response 等资讯
- const response = ctx.getResponse(); // 取得 request 物件, 这里指的是 Express 中 request, 相关属性可以查阅 Express API
- const request = ctx.getRequest(); // 取得 response 对象
- const status = exception.getStatus();
- response // 自定回复格式
- .status(status)
- .JSON({
- message: '自定错误信息',
- timestamp: new Date().toISOString(),
- requestedFrom: request.hostname,
- status,
- });
- }
- }
套用自定 Filter, 需要用 @UseFilters()
- @Controller()
- @UseFilters(new HttpExceptionFilter())
- export class AppController {
- @Post()
- @UsePipes(PlatformDTOValidationPipe)
- create(@Body() platformDTO: PlatformDTO){
- throw new HttpException('糟糕! 您的要求有问题, 请联系管理员', HttpStatus.BAD_REQUEST);
- return ` 平台:${platformDTO.platformname} 已建立 `;
- }
- }
跑 postman 测试 POST 会丟出 Exception
2018110603.PNG
可以看到自定错误信息
推荐一下我的公众号: [ geekjc ] , 微信号: [ c8706288 ] 一起学习交流编程知识, 分享经验, 各种有趣的事.
tuiguang.PNG
来源: http://www.jianshu.com/p/a13ad84e639f