【Nest教程】为项目增加个自定义过滤器

简介: 【Nest教程】为项目增加个自定义过滤器

前面讲了项目的初始化及拦截器的简单使用,这章我们简单讲下对于异常的处理,对项目增加一个自定义过滤器。Nest内置的异常层负责处理整个应用中抛出的所有异常,当捕获到异常并自定义修改,最终用户将收到友好的响应。

image.png

具体的用法及参数这里就不过多的说明,了解可以参考官方文档:

https://docs.nestjs.cn/7/exceptionfilters

复制

我们对之前新建的项目做个自定义的返回,首先为了项目方便管理。在src下新建文件夹filters,文件夹下新建http-exception.filter.ts文件,内容如下:

import {
  ArgumentsHost,
  Catch,
  ExceptionFilter,
  HttpException,
  HttpStatus,
  Logger,
} 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();
    const message = exception.message;
    Logger.log('错误提示', message);
    const errorResponse = {
      data: {
        error: message,
      }, // 获取全部的错误信息
      message: '请求失败',
      code: 1, // 自定义code
      url: request.originalUrl, // 错误的url地址
    };
    const status =
      exception instanceof HttpException
        ? exception.getStatus()
        : HttpStatus.INTERNAL_SERVER_ERROR;
    // 设置返回的状态码、请求头、发送错误信息
    response.status(status);
    response.header('Content-Type', 'application/json; charset=utf-8');
    response.send(errorResponse);
  }
}

复制

@Catch() 装饰器绑定所需的元数据到异常过滤器上。它告诉 Nest这个特定的过滤器正在寻找 HttpException 而不是其他的。catch() 方法有两个参数。

  • exception 参数是当前正在处理的异常对象
  • ArgumentsHost 是一个功能强大的实用程序对象

详细信息参考:

https://docs.nestjs.cn/7/exceptionfilters?id=%e5%8f%82%e6%95%b0%e4%b8%bb%e6%9c%ba

复制

我们将过滤器绑定到应用程序入口文件上

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { HttpExceptionFilter } from './filters/http-exception.filter';
import { TransformInterceptor } from './interceptor/transform.interceptor';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalFilters(new HttpExceptionFilter());
  app.useGlobalInterceptors(new TransformInterceptor());
  await app.listen(3000);
}
bootstrap();

复制

重启项目,访问不存在的接口地址,就可以看到效果了。

image.png

相关文章
|
4月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
12月前
|
数据安全/隐私保护
fastadmin中写接口是时Validate规则验证自定义如何用
fastadmin中写接口是时Validate规则验证自定义如何用
170 0
|
5月前
|
小程序 IDE TensorFlow
【社区每周】插件开发支持“静态懒加载”模式;小程序新增“占位组件”(2022年5月第三期)
【社区每周】插件开发支持“静态懒加载”模式;小程序新增“占位组件”(2022年5月第三期)
41 0
|
设计模式 前端开发 JavaScript
采用「复合模式」构建可复用的 Web 前端组件
在现代 Web 前端开发中,构建可复用、可维护的组件是提高开发效率和代码质量的关键。为了实现这一目标,开发者们一直在寻找合适的设计模式和架构原则。其中,Compound Pattern(复合模式)被广泛应用于构建具有高度复用性和可扩展性的 Web 前端组件。本文将深入探讨 Compound Pattern 的概念、优点和缺点,适用场景,开源实现方案,以及其在知名项目中的应用
4841 1
采用「复合模式」构建可复用的 Web 前端组件
|
前端开发
前端hook项目pc总结笔记-postgrest方法拼接扩展
前端hook项目pc总结笔记-postgrest方法拼接扩展
94 0
前端hook项目pc总结笔记-postgrest方法拼接扩展
|
JavaScript
【Vue 开发实战】实战篇 # 40:自己封装一个支持自动校验的表单项
【Vue 开发实战】实战篇 # 40:自己封装一个支持自动校验的表单项
127 0
【Vue 开发实战】实战篇 # 40:自己封装一个支持自动校验的表单项
|
JavaScript Android开发 Windows
OpenHarmony应用开发之全局配置参数解析
一般的项目都有全局模块的配置,OpenHarmony系统的应用同样也有这样的一个模块config.json,类似安卓中的AndroidManifest.xml,作用是相似的,配置应用板块,带大家来进一步解析其中的参数,以下给出一般的结构,正文即将开始~~
175 0
OpenHarmony应用开发之全局配置参数解析
|
PHP 开发工具 数据库
Yii2 修改框架入口增加配置适应开发生产环境
Yii2 修改框架入口增加配置适应开发生产环境
117 0
Yii2 修改框架入口增加配置适应开发生产环境
|
运维 Kubernetes 安全
DO447使用过滤器和插件转换器--使用查找模板化外部数据
DO447使用过滤器和插件转换器--使用查找模板化外部数据
233 1
DO447使用过滤器和插件转换器--使用查找模板化外部数据
|
IDE Java 测试技术
动态代码框架发布-CZGL.Roslyn
动态代码框架发布-CZGL.Roslyn
166 0
动态代码框架发布-CZGL.Roslyn