将变量从配置文件传递给装饰器
Pass variable from configuration file to decorator
我想用 NestJs、TypeORM 和 class-validator 创建一个 REST API。我的数据库实体有一个描述字段,目前最大长度为 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 中的最大长度。我有一个服务 class 保存着 API 的所有配置字段。假设此服务 class 也可以提供最大长度,有没有办法将变量传递给装饰器?
否则,将长度从 3000 更改为 2000 时,我必须更改多个文件。
由于 Typescript 的限制,无法在装饰器中使用 @nestjs/config
ConfigService
之类的东西。话虽如此,您也没有理由不能创建一个分配给 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;
}
我想用 NestJs、TypeORM 和 class-validator 创建一个 REST API。我的数据库实体有一个描述字段,目前最大长度为 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 中的最大长度。我有一个服务 class 保存着 API 的所有配置字段。假设此服务 class 也可以提供最大长度,有没有办法将变量传递给装饰器?
否则,将长度从 3000 更改为 2000 时,我必须更改多个文件。
由于 Typescript 的限制,无法在装饰器中使用 @nestjs/config
ConfigService
之类的东西。话虽如此,您也没有理由不能创建一个分配给 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;
}