跳至主要內容

拦截器

刘春龙原创...大约 1 分钟NodejsNestjs教程文档

拦截器是用 @Injectable() 装饰器注释并实现 NestInterceptor 接口的类。

拦截器具有一组有用的功能,这些功能的灵感来自 面向方面编程 (AOP) 技术。 它们可以:

  • 在方法执行之前/之后绑定额外的逻辑
  • 转换函数返回的结果
  • 转换函数抛出的异常
  • 扩展基本功能行为
  • 根据特定条件完全覆盖函数(例如,出于缓存目的)

现在我们生成一个拦截器

nest g itc ./interceptor/response

src/interceptor目录下,我们生成了一个响应拦截器

import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class ResponseInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle();
  }
}

简单修改

import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class ResponseInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(
      map((response) => {
        return response + 1
      }),
    );;
  }
}

使用

import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { UserService } from './user.service';
import { ResponseInterceptor } from 'src/interceptor/response/response.interceptor';

@UseInterceptors(ResponseInterceptor)
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) { }

  @Get("")
  findAll() {
    return "哈哈哈哈哈哈"
  }
}
 

 

 









也可以直接在路由上使用

import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { UserService } from './user.service';
import { ResponseInterceptor } from 'src/interceptor/response/response.interceptor';

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) { }

  @UseInterceptors(ResponseInterceptor)
  @Get("")
  findAll() {
    return "哈哈哈哈哈哈"
  }
}
 

 





 





此时,我们访问http://localhost:3000/user进行查看,看到了哈哈哈哈哈哈1,很明显拦截器将我们的响应数据进行了拦截处理

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7