问题描述
我在 nestJS 中使用 Typeorm,有没有办法将动态值传入列转换器?
export class Post extends EntityBase {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => PostType,(postType) => postType.id)
postType: PostType;
@Column()
name: string;
@Column()
dateStart: Date;
@Column()
dateEnd: Date;
@Column({ select: false })
status: number;
@Column({
transformer: {
to(n) {
return n;
},from(n) {
return configService.getCDNUrl() + n;
},},})
imageList: string;
@Column()
slug: string;
}
我正在等待使用完整的 CDN URL 为图像添加前缀,目前,这会正确附加 CDN URL,因为它是一个静态值,因此我从 configservice 中提取该值,因此我确实得到了 https://mycdn.com/image.jpg
但是,我的图像存储在每个客户端的文件夹中,所以我实际上需要它https://mycdn.com/{{clientId}}/image.jpg - 对 API 的每个请求都包含 clientId,有没有办法将此信息传递到实体或存储库中以进行转换响应(或者我们可以从 postType.clientId 中选择 clientId)还是必须在服务中手动转换它?
解决方法
对于以后看这个的人,我发现我可以使用@AfterLoad() 装饰器来更新值,甚至可以访问相关实体
@AfterLoad()
setCdnUrl() {
this.imageList = `${configService.getCDNUrl()}${
this.postType.clientId
}/content/${this.imageList}`;
}