Nest js 和 typeorm 自定义存储库问题
Posted
技术标签:
【中文标题】Nest js 和 typeorm 自定义存储库问题【英文标题】:Nest js and typeorm custom repository issue 【发布时间】:2020-12-11 18:58:44 【问题描述】:我有一个关于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 ])
但这似乎是一个混乱的解决方案,任何想法为什么它不能以原始方式工作?
提前致谢, 加比。
【问题讨论】:
问题解决了吗? 不.. 还是一样的问题 请阅读此处的链接。 github.com/typeorm/typeorm/issues/7370#issuecomment-778698027我用 OP 建议解决了我的问题 【参考方案1】:自定义仓库不需要注入
@InjectRepository(UserRepository)
您应该删除该行。这可能是您出错的原因。
【讨论】:
【参考方案2】:如果您使用自定义存储库,则不需要 @InjectRepository。 当您将存储库注入服务时,您需要@InjectRepository,例如
constructor(
@InjectRepository(User)
private userService:Repository<User>)
【讨论】:
以上是关于Nest js 和 typeorm 自定义存储库问题的主要内容,如果未能解决你的问题,请参考以下文章
Nest.js + TypeORM + OpenApi 中虚拟(计算)列的最佳实践