nestjs从零到一,快速上手(七) 拦截器的使用

演示代码:

1. logs.controller.ts

import { Body, Controller, Post, UseInterceptors } from '@nestjs/common';
import { IsNotEmpty, IsString } from 'class-validator';
import { SerializeInterceptor } from '../interceptors/serialize/serialize.interceptor';
import { Expose } from 'class-transformer';

class LogsDto {
  @IsString()
  @IsNotEmpty()
  msg: string;

  @IsString()
  id: string;

  @IsString()
  name: string;
}
class PublicLogsDto {
  @Expose()
  msg: string;
}
@Controller('logs')
export class LogsController {
  @Post()
  @UseInterceptors(new SerializeInterceptor(PublicLogsDto))
  postTest(@Body() dto: LogsDto) {
    console.log('🚀 ~ LogsController ~ postTest ~ dto:', dto);

    return dto;
  }
}

2. serialize.interceptor.ts代码

import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor,
} from '@nestjs/common';
import { plainToInstance } from 'class-transformer';
import { map, Observable } from 'rxjs';

@Injectable()
export class SerializeInterceptor implements NestInterceptor {
  constructor(private dto: any) {}
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    // const req = context.switchToHttp().getRequest();
    console.log('这里在拦截器执行之前');
    return next.handle().pipe(
      map((data) => {
        console.log('datadata', data);

        return plainToInstance(this.dto, data, {
          // 设置为true之后,所有经过该interceptor的接口都需要设置Expose或Exclude
          // Expose就是设置哪些字段需要暴露,Exclude就是设置哪些字段不需要暴露
          excludeExtraneousValues: true,
        });
      }),
    );
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值