管道将输入数据转为所需要的输出数据,还可以处理/校样数据,当传入数据不正确是抛出异常数据
创建管道
import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';import {ObjectSchema} from '@hapi/joi'@Injectable()export class UserPipe implements PipeTransform {constructor(private readonly schema:ObjectSchema) {this.schema = schema;}transform(value: any, metadata: ArgumentMetadata) {const {error} = this.schema.validate(value);if(error){throw (error)}else{return value;}}}
使用
import { Controller, Get, Query, UsePipes } from '@nestjs/common';import * as joi from '@hapi/joi';// 引入管道import { UserPipe } from '../../pipes/user.pipe';// 定义一个校样的规则let userSchema = joi.object().keys({name: joi.string().required(),age: joi.number().integer().min(10).max(20).required()})@Controller('user')export class UserController {@Get()@UsePipes(new UserPipe(userSchema))index(@Query() query) {console.log(query);return 'user'}}
执行流程
接受到数据后先通过UerPipes 传给自定义的管道,在管道中校样传入的规则合法后在返回出去,不合法返回错误。
