【问题标题】:Inject default values in DTO from configuration从配置中注入 DTO 的默认值
【发布时间】:2020-09-02 23:35:23
【问题描述】:

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

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

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

有更好的解决方案吗?

【问题讨论】:

    标签: nestjs class-validator nestjs-swagger


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 2019-08-24
        • 1970-01-01
        • 2020-03-21
        • 2016-05-18
        • 2020-09-29
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多