NestJS自定义响应拦截器封装与使用教程
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
这段代码做了以下几件事:
- 引入必要的依赖项,包括
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() { // ... 路由处理程序逻辑
原文地址: https://www.cveoy.top/t/topic/buwH 著作权归作者所有。请勿转载和采集!