我正在用nestjs编写我的第一个REST API。
我有几个实体必须为其定义基本的CRUD操作。 我想知道是否有一种方法可以创建基本的Crud服务,以便不对所有实体重复相同的代码。 在此基本服务中,我将拥有四种调用存储库的CRUD方法,以便实际执行与数据库相关的工作。
基本上,我希望拥有BaseCrudService<T>
,而不希望拥有UserService
的{{1}}。
这样,我可以“重写”派生类中的方法来进行额外的逻辑处理,而不是调用基本方法来实际插入,删除等。
有可能吗?如果是这样,您将如何去做?
答案 0 :(得分:9)
创建如下基本服务:
export class BaseCrudService<Entity extends BaseEntity> {
constructor(
public repository: Repository<Entity>,
) { }
async insertAsync(entity: Entity): Promise<InsertResult> {
return this.repository.insert(entity);
}
...
}
然后,各个服务扩展该类:
@Injectable()
export class UserService extends BaseCrudService<UserEntity>{
constructor(
@InjectRepository(UserEntity)
public repository: Repository<UserEntity>,
) {
super(repository);
}
}
Et-voilà现在您已经完成了插入,删除,更新等操作,这对于扩展该类的所有服务都是如此。
按照此逻辑,您可以轻松创建一个BaseCrudController
。
答案 1 :(得分:1)
我已经构建了一个软件包,该软件包可以帮助创建CRUD服务和控制器而无需继承https://www.npmjs.com/package/@nestjsx/crud