Nestjs 从配置中向DTO中注入默认值

Nestjs 从配置中向DTO中注入默认值,nestjs,class-validator,nestjs-swagger,Nestjs,Class Validator,Nestjs Swagger,目前,我在控制器中使用DTO对象,并将它们与类验证器插件配对,以解析/验证它们。问题是,我想为一些DTO参数指定默认值,但这些值应该来自配置。我需要一些优雅的方法将这些默认值注入DTO,并在各个端点的swagger元信息中自动填充这些默认值(我正在使用nest swagger插件为我自动应用装饰器)。为了达到预期的效果,我看到了两种解决方案,它们都需要一些不必要的折衷 解决方案1: 将配置值注入控制器本身,并在路由处理程序中解析DTO后,将参数和DTO传递给将在DTO上应用它们的方法。但是,为了

目前,我在控制器中使用DTO对象,并将它们与类验证器插件配对,以解析/验证它们。问题是,我想为一些DTO参数指定默认值,但这些值应该来自配置。我需要一些优雅的方法将这些默认值注入DTO,并在各个端点的swagger元信息中自动填充这些默认值(我正在使用nest swagger插件为我自动应用装饰器)。为了达到预期的效果,我看到了两种解决方案,它们都需要一些不必要的折衷

解决方案1: 将配置值注入控制器本身,并在路由处理程序中解析DTO后,将参数和DTO传递给将在DTO上应用它们的方法。但是,为了在swagger中记录默认值,我应该手动将“@ApiQuery”属性置于默认值的处理程序之上。首先,在本例中,我专门使用DTO和查询装饰器,而且我也不确定这是否会起作用。简言之,这是一个完全混乱的局面,我宁愿避免这种“解决方案”

解决方案2: 完全跳过DTO方法,使用单独的查询参数。通过将配置注入控制器,我可以使用默认管道应用默认值。但是,我需要为每个参数应用验证规则,或者创建一个DTO,我可以在其上应用验证规则并从查询参数手动构造它。此外,我需要手动记录所有参数,以便swagger拾取


有更好的解决方案吗?

您可以从拦截器传递默认值,并从配置文件导入默认数据。

您可以直接在ApiProperty decorator中传递默认值,就像在Dto中这样

@ApiProperty({ default: 'https://www.youtube.com/watch?v=CjG8u6ZZpag' })
@IsString()
@IsNotEmpty()
readonly keyName: string;