NestJS-根据请求形状进行不同的验证/序列化

NestJS-根据请求形状进行不同的验证/序列化,nestjs,Nestjs,我需要根据主体上名为status的属性验证一个可能具有3种不同形状的请求,这对于序列化也是必需的 我该怎么做 请举例说明: {状态:training,trainingSetId:dijado389828,文件数据:{fileUrl:someurl,nRows:4000}} {状态:test,testSetId:ddadfaax344x,someOtherProp:idk,fileData:{fileUrl:someurl,nRows:4000,predictionFileUrl:someothe

我需要根据主体上名为status的属性验证一个可能具有3种不同形状的请求,这对于序列化也是必需的

我该怎么做

请举例说明:

{状态:training,trainingSetId:dijado389828,文件数据:{fileUrl:someurl,nRows:4000}}

{状态:test,testSetId:ddadfaax344x,someOtherProp:idk,fileData:{fileUrl:someurl,nRows:4000,predictionFileUrl:someotherurl}

我可以为每种请求类型创建一个类,但是我如何有条件地使用其中一种呢?

您可以按如下方式使用该类:

从“@nestjs/common”导入{PipeTransform,可注入,ArgumentMetadata,BadRequestException}; @注射的 导出类JoiValidationPipe实现PipeTransform{ 构造函数私有只读架构:对象{} transformvalue:any,元数据:ArgumentMetadata{ const{error}=this.schema.validatevalue; 如果错误{ 抛出新的BadRequestException“验证失败”; } 返回值; } } 其中,架构可以在不同的文件中定义,并且在控制器中使用管道时可以作为参数传递,架构对象示例:

export const schema=Joi.object{ 状态:Joi.string.valid'training','test', 剩余键:Joi.any } .whenJoi.object{status:Joi.exist}.unknown{ 然后:Joi.object{ rest_key:Joi.有效的'some_value或required' }, 否则:Joi.object{ a:Joi.有效的“与上述类似” } };
你可以在这里阅读更多关于使用Joi进行条件验证的内容

你给出了一个很好的答案,但我正在寻找类验证器的答案,我可能应该指定,我认为这是nestjs的标准,但是使用类验证器将很难实现你的目标,顺便说一句,Joi也是nestjs验证输入的方法之一,但是up2u