我正在尝试创建一个通用 CRUD 控制器,该控制器在 NestJS 应用程序中使用通用 CRUD 服务。它工作正常,但 swagger 模块无法正确生成有关 REST 服务参数的文档。
这是服务:
import { Model, Document } from "mongoose";
export abstract class CrudService<CrudModel extends Document, CreateDto, UpdateDto> {
constructor(protected readonly model: Model<CrudModel>) {}
async findAll(): Promise<CrudModel[]> {
return this.model.find().exec();
}
async create(dto: CreateDto): Promise<CrudModel> {
const createdDto = new this.model(dto);
return createdDto.save();
}
async update(id: any, dto: UpdateDto): Promise<CrudModel> {
return this.model.findOneAndUpdate({ _id: id }, dto, { new: true });
}
async delete(id: any): Promise<boolean> {
const deleteResult = await this.model.deleteOne({ _id: id });
return deleteResult.ok === 1 && deleteResult.deletedCount === 1;
}
}
这是控制器:
import { Body, Delete, Get, Param, Post, Put } from "@nestjs/common";
import { Document } from "mongoose";
import { CrudService } from "./crud-service.abstract";
export abstract class CrudController<CrudModel extends Document, CreateDto, UpdateDto> {
constructor(protected readonly service: CrudService<CrudModel, CreateDto, UpdateDto>) {}
@Get()
async findAll(): Promise<CrudModel[]> {
return this.service.findAll();
}
@Post()
async create(@Body() dto: CreateDto): Promise<CrudModel> {
return this.service.create(dto);
}
@Put(':id')
async update(@Param('id') id: string, @Body() dto: UpdateDto): Promise<CrudModel> {
return this.service.update(id, dto);
}
@Delete(':id')
async delete(@Param('id') id: string): Promise<boolean> {
return this.service.delete(id);
}
}
我在 Github 存储库上发现了这个问题:https://github.com/nestjs/swagger/issues/86 https://github.com/nestjs/swagger/issues/86
最后一条评论提到了使用 mixins 的解决方案,但我不知道如何使其适应我的需求