关于Nestjs中的自定义存储库,我有一个小问题。
当请求进入时(例如针对用户实体),我有以下逻辑。
用于用户请求的控制器->将数据传递给服务->服务执行逻辑和解析->调用自定义存储库以获取基本数据命令(保存,更新,获取等)。
所以我有以下存储库:
@EntityRepository(User)
export class UserRepository extends Repository<User> {
/**
* Get a user by id
* @param id
*/
async getUserById(id: number): Promise<User> {
return await this.findOne({
where: [{ id }],
});
}
}
服务看起来像这样:
@Injectable()
export class UserService{
constructor(
@InjectRepository(UserRepository)
private userRepository: UserRepository
){
}
/**
* Returns a user object by id
* @param id
*/
async getUserById(id: number): Promise<User>{
return await this.userRepository.getUserById(id);
}
}
如果有问题,用户模块为:
@Module({
imports: [
TypeOrmModule.forFeature([User, UserRepository])
],
controllers: [UserController],
providers: [UserService],
exports: [UserService],
})
export class UserModule{
}
但是由于某些原因,当我调用getUserById时,出现以下错误: “ TypeError:无法读取未定义的属性'findOne'”
如果我将存储库功能更改为此,我就能修复它:
return await getRepository(User).findOne({where: [{ id }]})
但是这似乎是一个混乱的解决方案,为什么它不能以原始方式起作用?
预先感谢, 加比。
答案 0 :(得分:0)
自定义存储库无需注入
@InjectRepository(UserRepository)
您应该删除该行。这可能是您出错的原因。
答案 1 :(得分:0)
尝试这样
@Injectable()
export class UserService{
constructor(@InjectRepository(User) private userRepository: Repository<User>){}
/**
* Returns a user object by id
* @param id
*/
async getUserById(id: number): Promise<User>{
return await this.userRepository.findOne(id);
}
}
您无需为此用例编写自定义方法,因为findOne
方法会在默认情况下解决此问题。
答案 2 :(得分:0)
如果使用自定义存储库,则不需要@InjectRepository。 在将存储库注入服务中时需要@InjectRepository
OS: Microsoft Windows 10 Education Edition
Processor: AMD Ryzen 7 3700X 8-core
Installed Physical Memory (RAM): 16.0 GB
R version: 4.0.2 (2020-06-22) -- "Taking Off Again"
Rstudio version: 1.3.1056