管道将输入数据转为所需要的输出数据,还可以处理/校样数据,当传入数据不正确是抛出异常数据

创建管道

  1. import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';
  2. import {ObjectSchema} from '@hapi/joi'
  3. @Injectable()
  4. export class UserPipe implements PipeTransform {
  5. constructor(private readonly schema:ObjectSchema) {
  6. this.schema = schema;
  7. }
  8. transform(value: any, metadata: ArgumentMetadata) {
  9. const {error} = this.schema.validate(value);
  10. if(error){
  11. throw (error)
  12. }else{
  13. return value;
  14. }
  15. }
  16. }

使用

  1. import { Controller, Get, Query, UsePipes } from '@nestjs/common';
  2. import * as joi from '@hapi/joi';
  3. // 引入管道
  4. import { UserPipe } from '../../pipes/user.pipe';
  5. // 定义一个校样的规则
  6. let userSchema = joi.object().keys({
  7. name: joi.string().required(),
  8. age: joi.number().integer().min(10).max(20).required()
  9. })
  10. @Controller('user')
  11. export class UserController {
  12. @Get()
  13. @UsePipes(new UserPipe(userSchema))
  14. index(@Query() query) {
  15. console.log(query);
  16. return 'user'
  17. }
  18. }

执行流程
接受到数据后先通过UerPipes 传给自定义的管道,在管道中校样传入的规则合法后在返回出去,不合法返回错误。