前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NestJS中使用拦截器

NestJS中使用拦截器

作者头像
kongxx
发布2024-09-11 15:56:06
1080
发布2024-09-11 15:56:06
举报

在NestJS中,拦截器是一种强大的工具,可以用来在请求处理的不同阶段执行一些操作。拦截器可以用于日志记录、验证、转换请求和响应等任务。今天就看看如何在NestJS中使用拦截器。

什么是拦截器?

拦截器是一个实现了NestInterceptor接口的类。它可以在请求处理的不同阶段执行一些操作,例如在请求到达控制器之前或之后执行一些逻辑。拦截器可以用于日志记录、验证、转换请求和响应等任务。

如何创建拦截器?

要创建一个拦截器,需要创建一个实现了NestInterceptor接口的类。

代码语言:javascript
复制
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Injectable()
export class LoggingInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    console.log('Before...');
    const now = Date.now();
    return next.handle().pipe(
      tap(() => console.log(`After... ${Date.now() - now}ms`)),
    );
  }
}

这里创建了一个名为LoggingInterceptor的拦截器,它实现了NestInterceptor接口。在intercept方法中,首先打印一条消息,然后记录当前时间。然后调用next.handle()方法来处理请求,并使用tap操作符在请求处理完成后打印一条消息,并计算处理请求所需的时间。

如何使用拦截器?

要使用拦截器,需要在模块的providers数组中注册它,并在需要使用它的路由处理器或控制器上添加@UseInterceptors装饰器。

代码语言:javascript
复制
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { LoggingInterceptor } from './logging.interceptor';
import { AppController } from './app.controller';

@Module({
  controllers: [AppController],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: LoggingInterceptor,
    },
  ],
})
export class AppModule {}

这里在AppModule中注册了LoggingInterceptor,并将其作为全局拦截器使用。这意味着LoggingInterceptor将应用于所有路由处理器和控制器。

也可以在特定的路由处理器或控制器上使用@UseInterceptors装饰器来应用拦截器,比如:

代码语言:javascript
复制
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { LoggingInterceptor } from './logging.interceptor';

@Controller()
@UseInterceptors(LoggingInterceptor)
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

这里在CatsController上使用了@UseInterceptors装饰器来应用LoggingInterceptor。这意味着LoggingInterceptor将只应用于CatsController中的路由处理器。

总结

拦截器是NestJS中一个非常强大的工具,可以用于在请求处理的不同阶段执行一些操作。通过创建一个实现了NestInterceptor接口的类,并在需要使用它的路由处理器或控制器上添加@UseInterceptors装饰器,可以轻松地使用拦截器。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是拦截器?
  • 如何创建拦截器?
  • 如何使用拦截器?
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档