1

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

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

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

有更好的解决方案吗?

4

2 回答 2

2

您可以像这样在您的 Dto 中直接在 ApiProperty 装饰器中传递默认值...

@ApiProperty({ default: 'https://www.youtube.com/watch?v=CjG8u6ZZpag' })
@IsString()
@IsNotEmpty()
readonly keyName: string;
于 2020-09-03T10:08:10.423 回答
1

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

于 2020-05-18T15:14:23.190 回答