创建管道
nest g pipe pipe/news
news.pipe
import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';
@Injectable()
export class NewsPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
console.log('pipe-value: ', value); //get/post传过来的值
value.id = '666';
return value;
}
}
使用管道
news.controller
import { Controller, Get, Query, UsePipes } from '@nestjs/common';
// 1.引入具体的管道
import { NewsPipe } from '../../pipe/news.pipe'
@Controller('news')
export class NewsController {
@Get()
// 2.实例化管道
@UsePipes(new NewsPipe())
// 注意:需要写Query,否则管道接收不到数据
index(@Query() info) {
console.log('controller--info: ', info);
return 'news111'
}
}
管道结合joi库实现数据验证
**注意:**Joi使用不当会报错。
安装
$ npm install --save @hapi/joi
$ npm install --save-dev @types/hapi__joi
创建管道
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
@Injectable()
export class UserPipe implements PipeTransform {
private schema;
constructor(schema){
this.schema=schema
}
transform(value: any, metadata: ArgumentMetadata) {
const { error } = this.schema.validate(value);
console.log(error);
if(error){
return {"success":false};
}
return value;
}
}
在controller中使用管道
import { Controller, Get, Query, UsePipes } from '@nestjs/common';
import { UserPipe } from '../../pipe/user.pipe'
// 引入joi
import * as Joi from '@hapi/joi';
// 配置校验规则
let userSchema = Joi.object().keys({
name: Joi.string().required(),
age: Joi.number().integer().min(6).max(66).required()
})
@Controller('user')
export class UserController {
@Get()
// 使用管道
@UsePipes(new UserPipe(userSchema))
index(@Query() info) {
console.log('info: ', info);
return 'user'
}
}