Передать переменную из файла конфигурации декоратору - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу создать REST API с помощью Nest Js, TypeORM и класса-валидатора. У моей сущности базы данных есть поле описания, которое в настоящее время имеет максимальную длину 3000. С TypeORM код равен

@Entity()
export class Location extends BaseEntity {
  @Column({ length: 3000 })
  public description: string;
}

При создании новой сущности я хочу проверять входящие запросы для этой максимальной длины, используя class-validator. Может быть

export class AddLocationDTO {
  @IsString()
  @MaxLength(3000)
  public description: string;
}

При обновлении этого поля описания мне придется проверять эту максимальную длину и в других DTO. У меня есть класс обслуживания, содержащий все мои поля конфигурации для API. Предполагая, что этот класс обслуживания также может обслуживать максимальную длину, есть ли способ передать переменную декоратору?

В противном случае, при изменении длины с 3000 на 2000, я должен изменить несколько файлов.

1 Ответ

1 голос
/ 16 апреля 2020

Нет способа использовать что-то вроде @nestjs/config ConfigService в декораторе из-за ограничений в Typescript. С учетом вышесказанного также нет причины, по которой вы не могли бы создать константу, присвоенную значению process.env, а затем использовать эту константу в декораторе. Так что в вашем случае вы могли бы иметь

// constants.ts
// you may need to import `dotenv` and run config(), but that could depend on how the server starts up
export const fieldLength = process.env.FIELD_LENGTH

// location.entity.ts
@Entity()
export class Location extends BaseEntity {
  @Column({ length: fieldLength })
  public description: string;
}

// add-location.dto.ts
export class AddLocationDTO {
  @IsString()
  @MaxLength(fieldLength)
  public description: string;
}

...