Docs: https://docs.nestjs.com/pipes
管道将输入数据转换为所需的输出。此外,它可以处理验证,当数据不正确时可能会抛出异常。
内置的 pipe
import { ArgumentMetadata, Injectable, PipeTransform, BadRequestException } from '@nestjs/common';
@Injectable()
export class InfoPipe implements PipeTransform {
async transform(value: any, metadata: ArgumentMetadata) {
if(!(value.name && value.age)){
throw new BadRequestException('发送语义有误')
}
return value;
}
}
// 使用pipe
@Get()
@UsePipes(new InfoPipe())
root(@Query() info) {
return `hello world`
}
Joi库 https://github.com/hapijs/joi
import { ArgumentMetadata, Injectable, PipeTransform, BadRequestException } from '@nestjs/common';
import * as Joi from 'joi'
@Injectable()
export class InfoPipe implements PipeTransform {
constructor(private readonly schema) { }
async transform(value: any, metadata: ArgumentMetadata) {
console.log(value);
const { error } = Joi.validate(value, this.schema)
if (error) {
throw new BadRequestException('发送语义有误')
}
return value;
}
}
import * as Joi from 'joi'
let rootInfo = Joi.object().keys({
name: Joi.string().required(),
age: Joi.number().integer().min(6).max(66).required(),
})
@Get()
@UsePipes(new InfoPipe(rootInfo))
root(@Query() info) {
return `hello world`
}