Nestjs 管道接收的嵌套参数
因此,在使用Nestjs 管道接收的嵌套参数,nestjs,Nestjs,因此,在使用nestjs开发一个简单的REST端点时,我发现了一个小问题 我有一个名为JoiValidationPipe的管道,它使用Joi对象验证请求主体。一切正常,但如果请求同时包含body和param,我会遇到一个问题: @补丁(':id') @UsePipes(新JoiValidationPipe(CreateComicSchema)) async updateComic(@Body()comic:comic,@Param()params){ comic.id=params.id; 返回
nestjs
开发一个简单的REST端点时,我发现了一个小问题
我有一个名为JoiValidationPipe
的管道,它使用Joi对象验证请求主体。一切正常,但如果请求同时包含body和param,我会遇到一个问题:
@补丁(':id')
@UsePipes(新JoiValidationPipe(CreateComicSchema))
async updateComic(@Body()comic:comic,@Param()params){
comic.id=params.id;
返回等待此。comicService。更新(comic);
}
这里,JoiValidationPipe接收的参数只是请求url中的id
,而不是主体
我想知道是否有可能强制管道接收请求的主体
如果url中没有参数,joivalidateinpipe
将自动接收正文,则不存在此问题
创作漫画
@Post()
@UsePipes(新JoiValidationPipe(CreateComicSchema))
异步createComic(@Body()comic:comic){
返回等待此。comicService。创建(漫画);
}
joivalizationpipe
import*作为Joi从'Joi'导入;
从“@nestjs/common”导入{PipeTransform,可注入,ArgumentMetadata,BadRequestException};
@可注射()
导出类JoiValidationPipe实现PipeTransform{
构造函数(私有只读模式){}
转换(值:任意,元数据:ArgumentMetadata){
const{error}=Joi.validate(值,this.schema);
如果(错误){
抛出新的BadRequestException(“验证失败”);
}
返回值;
}
}
使用管道
仅验证某些特定类型的参数(在主体
、参数
等中)的最佳方法是将类(或实例)作为这些装饰器的参数
e、 g
此处,管道仅应用于@Body
。但是我没有使用@usepippes
,因为这不是必需的
async updateComic(@Body(new ValidationPipe({ whitelist: true }) comic: Comic, @Param() params) {