nestjs - 02

一、拦截器

  1. 全局响应拦截器

    自定义httpResponse 文件
    // 1、自定义response 文件
    import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common'
    import { map } from 'rxjs/operators'
    import { Observable } from 'rxjs'
    
    interface Data<T> {
      data: T
    }
    
    @Injectable()
    export class HttpResponse implements NestInterceptor {
      intercept(context: ExecutionContext, next: CallHandler): Observable<Data<T>> {
        return next.handle().pipe(map(data => {
          // 自定义返回给前端的内容
          return {
            data,
            status: 0,
            message: 'ok',
            success: true
          }
        }))
      }
    }
    
    
    
    在main.ts 中引入httpResponse
    import { HttpResponse } from './common/httpResponse'
    
    app.useGlobalInterceptors(new CustomResponse())
    
  2. 全局异常拦截器

    自定义httpFilter.ts 文件
    import { Catch, ExceptionFilter, HttpException, ArgumentsHost } from '@nestjs/common'
    import { Request, Response } from 'express'
    
    @Catch()
    export class HttpFilter implements  {
    	catch(exception: HttpException, host: ArgumentsHost) {
        const ctx = host.switchToHttp()
        const request = ctx.getRequest<Request>()
        const response = ctx.getResponse<Response>()
        const status = exception.getStatus()
        response.status(status).json({
        	// 自定义返回给前端的内容
          status,
          success: false,
          data: null,
          time: new Date(),
          message: exception.message,
          path: request.url
        })
      }
    }
    
    在main.ts 中引入httpFilter.ts 文件
    import { HttpFilter } from './common/httpFilter'
    app.useGlobalFilters(new HttpFilter())
    

二、管道

1. 管道转换
import { ParseIntPipe, ParseFloatPipe, ParseBoolPipe, ParseArrayPipe, ParseUUIDPipe, DefaultValuePipe, ValidationPipe, Controller, Get, Param } from '@nestjs/commont'

@Controller()
export class UserController {
  Get('id')
  findUser(@Param('id', ParseIntPipe) id: number) {
   // 将string id 转换成number 
  }
  
}

2. 管道验证
一、自定义管道验证

安装必要模块

npm i class-validator class-transformer -S

1、创建login.pipe.ts

import { ArgumentMetadata, HttpException, Injectable, PipeTransform, HttpStatus } from '@nestjs/common';
import { plainToInstance } from 'class-transformer'
import { validate } from 'class-validator'

@Injectable()
export class LoginPipe implements PipeTransform {
  async transform(value: any, metadata: ArgumentMetadata) {
    console.log('value:', value);
    console.log('metadata:', metadata);
    const DTO = plainToInstance(metadata.metatype, value)
    const errors = await validate(DTO)
    if (errors.length) {
      throw new HttpException(errors, HttpStatus.BAD_REQUEST)
    }
    console.log('errors:', errors);
    return value;
  }
}

2、配置login.dto.ts

import { IsNotEmpty, IsString, Length, IsNumber } from 'class-validator'

export class CreateLoginDto {
  @IsNotEmpty({
    message: '不能为空'
  })
  @IsString()
  @Length(5, 10, {
    message: '不能超过十个字符'
  })
  name: string
  @IsNumber()
  age: string
}

3、在controller文件中引入

import { Controller, Body } from '@nestjs/common'
import { LoginDto } from './login.dto'
import { LoginPipe } from './login.pipe'

@Controller()
export class LoginController {
  @Post()
  @login(@Body(LoginPipe loginDto: LoginDto) {
    
  }
}
二、使用nestjs 自带的ValidationPipe(需要在dto 文件中配置好校验规则)
import { ValidationPipe } from '@nestjs/common'

app.useGlobalPipes(new ValidationPipe())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值