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) {