我有个问题随着@EntityRepository
decorator在typeorm@^0.3.6
中被标记为已弃用,现在推荐的或TypeScript友好的方法是什么?以前的自定义存储库看起来像这样:
// users.repository.ts
import { EntityRepository, Repository } from 'typeorm';
import { User } from './user.entity';
@EntityRepository(User)
export class UsersRepository extends Repository<User> {
async createUser(firstName: string, lastName: string): Promise<User> {
const user = this.create({
firstName,
lastName,
});
await this.save(user);
return user;
}
}
由于NestJS默认配置了TypeScript支持,我将能够在这样的服务中调用usersRepository.createUser()
而不会出现问题:
// users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UsersRepository } from './users.repository';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(UsersRepository)
private readonly usersRepository: UsersRepository,
) {}
async createUser(firstName: string, lastName: string): Promise<User> {
return this.usersRepository.createUser(firstName, lastName);
}
}
下面是模块导入自定义存储库的方式:
// users.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersController } from './users.controller';
import { UsersRepository } from './users.repository';
import { UsersService } from './users.service';
@Module({
imports: [TypeOrmModule.forFeature([UsersRepository])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
另外,我在这里提到MongoDB的原因是因为我尝试使用typeorm@0.2
,其中仍然支持@EntityRepository
,但当我试图将其导入到模块中时收到错误,说明Repository not found
或其他内容。请注意,如果我在TypeORM中选择postgresql
作为我的数据库,并进行了上述相同的更改,则不会出现此问题。因此,我去检查最新的,只发现它已经被弃用,我也没有找到任何例子在NestJS文档。
4条答案
按热度按时间cx6n0qe31#
我想我找到了一个解决方案,它允许调用自定义方法,但也允许调用继承的方法。这个“问题”似乎还不太流行,但在typeorm GitHub线程中肯定有一些关于它的讨论:https://github.com/typeorm/typeorm/issues/9013
下面的解决方案使用MySQL作为底层数据库驱动程序,但我认为它也适用于MongoDB。
team.repository.ts
team.service.ts
team.module.ts
8dtrkrch2#
在
TypeORM
中为mongo创建自定义仓库的方法如下:users.repository.ts
在这里,您将使用
@Injectable
装饰器而不是@EntityRepository
,对于inject,schema
将使用MongoRepositoryusers.service.ts
users.module.ts
00jrzges3#
vmjh9lq94#
我刚刚开发了一个解决这个问题的软件包,你可以看看。
nestjs-typeorm-custom-repository