管道将输入数据转为所需要的输出数据,还可以处理/校样数据,当传入数据不正确是抛出异常数据
创建管道
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 传给自定义的管道,在管道中校样传入的规则合法后在返回出去,不合法返回错误。