NestJS自定义响应拦截器封装与使用教程

在NestJS中,响应拦截器为开发者提供了一种优雅的方式来处理HTTP响应。通过自定义拦截器,我们可以在响应返回给客户端之前,对其进行统一的修改、扩展或格式化,从而提高代码复用性和可维护性。

本文将带您深入了解如何在NestJS中创建和使用自定义响应拦截器。

1. 创建响应拦截器

首先,使用Nest CLI或手动创建一个新的拦截器类:bashnest g interceptor response

这将创建一个名为 response.interceptor.ts 的文件。打开该文件,并将以下代码粘贴进去:typescriptimport { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';import { Observable } from 'rxjs';import { map } from 'rxjs/operators';

@Injectable()export class ResponseInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable { return next.handle().pipe( map(data => { // 在这里对响应进行处理 const modifiedData = { ...data, additionalField: 'some value' }; return modifiedData; }), ); }}

这段代码做了以下几件事:

  • 引入必要的依赖项,包括 Injectable, NestInterceptor, ExecutionContext, CallHandler 等。- 使用 @Injectable() 装饰器将该类标记为可注入的 NestJS 提供者。- 实现 NestInterceptor 接口,该接口定义了一个 intercept 方法。- 在 intercept 方法中,我们使用 RxJS 的 map 操作符来转换响应数据。这里只是简单地添加了一个名为 additionalField 的字段,您可根据实际需求进行修改。

2. 应用响应拦截器

创建好拦截器后,您需要将其应用到您的应用程序、控制器或特定的路由处理程序中。

**全局应用:**typescript// main.tsimport { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';import { ResponseInterceptor } from './response.interceptor';

async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalInterceptors(new ResponseInterceptor()); await app.listen(3000);}bootstrap();

**控制器级别应用:**typescriptimport { Controller, Get, UseInterceptors } from '@nestjs/common';import { ResponseInterceptor } from './response.interceptor';

@UseInterceptors(ResponseInterceptor)@Controller('example')export class ExampleController { // ... 控制器逻辑}

**路由处理程序级别应用:**typescriptimport { Controller, Get, UseInterceptors } from '@nestjs/common';import { ResponseInterceptor } from './response.interceptor';

@Controller('example')export class ExampleController { @Get() @UseInterceptors(ResponseInterceptor) getData() { // ... 路由处理程序逻辑

NestJS自定义响应拦截器封装与使用教程

原文地址: https://www.cveoy.top/t/topic/buwH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录