1、创建管道nest g pipe user
管道创建完成后生成如下代码:
import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';
@Injectable()
export class UserPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
//这个里面可以修改传入的值以及验证转入值的合法性
return value;
}
}
2、使用管道
import { Controller,Get,UsePipes,Query} from '@nestjs/common';
import {UserPipe} from '../../user.pipe';
@Controller('user')
export class UserController {
@Get()
index(){
return '用户页面';
}
@Get('pipe')
@UsePipes(new UserPipe())
pipe(@Query() info){
console.log(info);
return `this is Pipe`;
}
}
三、 Nestjs 中管道结合 Joi 库实现数据验证
Joi 库: https://github.com/hapijs/joi
import { ArgumentMetadata, Injectable, PipeTransform, BadRequestException } from '@nestjs/common';
import * as Joi from 'joi';
@Injectable()
export class ArticlePipe implements PipeTransform {
constructor(private readonly schema) { }
transform(value: any, metadata: ArgumentMetadata) {
console.log("pipe-管道拿到的数据", value);
// const { error } = Joi.validate(value, this.schema)
const { error } = this.schema.validate(value)
console.log(error);
if (error) {
throw new BadRequestException(error.details[0].message)
// throw new BadRequestException(error)
}
return value;
}
}
import * as Joi from 'joi';
let rootInfo = Joi.object({
name: Joi.string().required(),
age: Joi.number().integer().min(6).max(66).required(),
id: Joi.string().min(6).max(66),
}).unknown();
@Get('pipe')
@UsePipes(new ArticlePipe(rootInfo))
pipe(@Query() info) {
console.log('info--管道', info);
return 'info'
}
@Post('pipe2')
@UsePipes(new ArticlePipe(rootInfo))
pipe2(@Query() info) {
console.log('info--管道', info);
return 'info'
}
unknown() 是不用验证未知数据的

Comments | NOTHING