zor*_*orn 9 entity dependency-injection nestjs
我目前被困在一个问题上,我不知道如何解决:
在我的 NestJS 应用程序中,我想让我的所有TypeORM Entities
扩展BaseEntity
类都提供一些通用功能。例如,我想提供一种额外的getHashedID()
方法来散列(并因此隐藏)我的 API 客户的内部 ID。
散列是由 a 完成的HashIdService
,它提供了一个encode()
anddecode()
方法。
我的设置看起来像这样(删除了装饰器以提高可读性!):
export class User extends BaseEntity {
id: int;
email: string;
name: string;
// ...
}
export class BaseEntity {
@Inject(HashIdService) private readonly hashids: HashIdService;
getHashedId() {
return this.hashids.encode(this.id);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我调用该this.hashids.encode()
方法,它会抛出一个异常:
Cannot read property 'encode' of undefined
Run Code Online (Sandbox Code Playgroud)
我怎样才能把inject
一个服务变成一个entity/model
类?这甚至可能吗?
更新 #1
特别是,我想“注入”HashIdService
到我的Entities
. 此外,Entities
应该有一个getHashedId()
方法来返回他们的散列 ID.. 因为我不想“一遍又一遍”地做这个,我想在BaseEntity
上面描述的“隐藏”这个方法..
我目前的 NestJS 版本如下:
Nest version:
+-- @nestjs/common@5.4.0
+-- @nestjs/core@5.4.0
+-- @nestjs/microservices@5.4.0
+-- @nestjs/testing@5.4.0
+-- @nestjs/websockets@5.4.0
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!
如果您不需要HashIdService
在单元测试中注入或模拟它,您可以简单地执行以下操作:
基础实体.ts
import { HashIdService } from './HashIdService.ts';
export class BaseEntity {
public id: number;
public get hasedId() : string|null {
const hashIdService = new HashIdService();
return this.id ? hashIdService.encode(this.id) : null;
}
}
Run Code Online (Sandbox Code Playgroud)
用户.ts
export class User extends BaseEntity {
public email: string;
public name: string;
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后创建您的用户:
const user = new User();
user.id = 1234;
user.name = 'Tony Stark';
user.email = 'tony.stark@avenge.com';
console.log(user.hashedId);
//a1b2c3d4e5f6g7h8i9j0...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2399 次 |
最近记录: |