NestJS 创建基础 CRUD 服务

NestJS Create Base CRUD Service

我正在用 nestjs 编写我的第一个 REST API。

我有几个实体,我必须为其定义基本的 CRUD 操作。 我想知道是否有一种方法可以创建我可以使用的基本 crud 服务,以便不为所有实体重复相同的代码。 在这个 base-crud 服务中,我将有四个调用存储库的 CRUD 方法,以便实际执行与数据库相关的操作。

基本上我希望有一个 BaseCrudService<T> 而不是 UserService extends BaseCrudService<UserEntity>。 这样我就可以在派生的 class 中使用 "override" 方法来执行额外的逻辑业务,而不是调用基本方法来实际插入、删除等

可能吗?如果是这样,你会怎么做?

按如下方式创建 base-crud 服务:

export class BaseCrudService<Entity extends BaseEntity> {

    constructor(
        public repository: Repository<Entity>,
    ) { }

    async insertAsync(entity: Entity): Promise<InsertResult> {
        return this.repository.insert(entity);
    }
    ...
}

而且个人服务扩展了 class :

@Injectable()
export class UserService extends BaseCrudService<UserEntity>{
  constructor(
    @InjectRepository(UserEntity)
    public repository: Repository<UserEntity>,
  ) {
    super(repository);
  }
}

Et-voilà 现在您已经处理了插入、删除、更新等......这适用于扩展 class.

的所有服务

按照这个逻辑,您可以轻松创建 BaseCrudController.

我构建了一个包来帮助创建无继承的 CRUD 服务和控制器https://www.npmjs.com/package/@nestjsx/crud