当前位置: 首页 > 知识库问答 >
问题:

具有typeorm和类验证器的NestJS实体中的DRY原则

方昊
2023-03-14

有没有办法把这个密码转过来

export class person {
  @IsString()
  @Column('text')
  name: string

  @IsOptional()
  @IsString()
  @Column('text')
  description?: string
}

变成类似这样的东西

export class person {
  name: string
  description?: string
}

我知道需要装饰器,但是当每个属性必须声明属性类型三次或更多次时,SSOT似乎丢失了。

有没有更简单的方法?乔伊?模式生成?

共有1个答案

胡景澄
2023-03-14

如果您发现自己在属性上反复使用同一组装饰器,您可以创建一个新的装饰器,将它们组合在一起。

const CombinedDecorator = (target, property, descriptor) => {
   IsOptional(target, property, descriptor);
   IsString(target, property, descriptor);
   Column('text')(target, property, descriptor);
}

class Person {
   @CombinedDecorator()
   name: string;
}

你可以想出一些覆盖你常用用例的方法,或者考虑把它变成一个装饰器工厂,它在配置一个配置对象,并可以根据PARAMs来选择装饰器。

我认为,即使是一点点的重复与装饰者是更可取的使用像JOI的东西,因为你仍然必须明确地陈述所有的规则,但在一个独立于你的实际模型的地方,允许多个来源的真理。

 类似资料:
  • 我有一个实体像下面在Nestjs应用程序与typeorm为mongoDB: 我的其他实体扩展了审计,在我的应用程序中,我使用jwt来验证用户。 问题是,当我想保存一个实体,我不知道如何设置createdBy与@Before插入钩子... 我知道请求中有用户,但我不知道将用户引入方法的正确方法是什么?

  • 问题内容: 我有一条路由,需要经过身份验证和未经身份验证的用户使用。我用来启用身份验证,但是它可以防止任何未经身份验证的用户访问路由(正常)。 如何允许未经身份验证的用户也访问路由? 似乎没有可以传递给我的护照策略中的选项。 问题答案: 您可以通过扩展现有实例来创建自己的实例: 然后在您的控制器上使用此代码:

  • 我试图使用项目外部定义的类型orm实体。也就是说,我有两个项目:模型和核心api。Models是导出实体定义的npm包。因此,从核心api(nestjs项目)开始,我尝试使用这些实体定义连接。大概是这样的: 然后,在一个模块中,我从npm包导入A实体: 这将导致下一个错误: 我完全不知道如何跟随,因为我不明白它在引擎盖下是如何工作的。我看到了typeorm和@nestjs/typeorm的代码,但

  • 我正试图实现与自定义字段的多对多关系,就像下面演示的那样。我的数据与他给出的例子不同,但是关系的结构是相同的。我能够成功地创建关系,但我有一个问题,即产品(product_id)的外键为空,即使客户端正在为该字段发送数据。出于某种原因,TypeORM正在删除它并输入空值。 以下是连接表的结构: 我的服务通过以下功能提交数据: 提交表单时,装运数据将与shipmentProducts一起成功保存,但

  • 我试图在我的项目中巧妙地使用DTO和实体,但它似乎比它应该的更复杂。我正在构建一个管理库存的后端,我使用NestJs和TypeOrm。 我的客户向我发送了一组数据抛出POST请求,比如: 我的控制器有责任通过使用自定义ValidationPipe检查字段: 我在许多地方读到,在最佳实践中,原始数据应该转换为DTO,当涉及到数据插入时,我应该将DTO转换为类型化实体。 我同意这种方法,但我发现它非常

  • 问题内容: 我想从返回的JSON中排除密码字段。我正在使用NestJS和Typeorm。 针对此问题提供的解决方案不适用于我或NestJS。如果需要,我可以发布我的代码。还有其他想法或解决方案吗?谢谢。 问题答案: 我建议创建一个利用class-transformer库的拦截器: 然后,只需使用装饰器排除属性,例如: