NestJs :如何使用nestjsx/crud和手动实现来实现控制器



在我的Nestjs应用程序下,我正在使用 @nestjsx/crud 来处理crud操作

但是对于某些路径和某些情况,我需要手动实现对服务的调用,从而运行一些sql查询。

我的控制器如下所示

import {Controller, Get} from '@nestjs/common';
import { Crud, CrudController } from '@nestjsx/crud';
import { TodoEntity } from './todo.entity';
import { TodoService } from './todo.service';
@Crud({
model: {
type: TodoEntity
}
})
@Controller('todo')
export class TodoController implements CrudController<TodoEntity> {
constructor(public todoService: TodoService) {}
// I WANT TO DO THIS in addition to the previous tremanet->
@Get('/mypath')
public async myManulaTreatment() {
return await this.todoService.getManual();
}
}

我的服务看起来像这样:

import { Injectable } from '@nestjs/common';
import { TypeOrmCrudService } from "@nestjsx/crud-typeorm";
import { TodoEntity } from './todo.entity';
import { InjectRepository } from '@nestjs/typeorm';
import {getManager , getConnection} from "typeorm";
@Injectable()
export class TodoService extends TypeOrmCrudService<TodoEntity>{
constructor(@InjectRepository(TodoEntity) repo) {
super(repo)
}
// THIS IS MY MANUAL TREATMENT
async getManual(){
const entityManager = await getConnection().manager.query("SELECT * FROM "+process.env.DATABASE_DB.mytable);
}
}

但是我得到了这个错误:

Class 'TodoController' incorrectly implements interface 'CrudController<TodoEntity>'.
Property 'service' is missing in type 'TodoController' but required in type 'CrudController<TodoEntity>'.

建议?

与其调用TodoServicetodoService,不如将其称为service并确保将其传递给super(service)以确保基类也有其适当的依赖项。这是从 nestjsx/crud 添加路由的文档

您需要override路线:https://github.com/nestjsx/crud/wiki/Controllers#routes-override

然后,您可以在构造函数中注入服务并在路由中使用它。

例:

import {
Crud,
CrudController,
Override,
CrudRequest,
ParsedRequest,
ParsedBody,
CreateManyDto,
} from '@nestjsx/crud';
@Crud({
model: {
type: Hero,
}
})
@Controller('heroes')
export class HeroesCrud implements CrudController<Hero> {
constructor(public service: HeroesService) {}
get base(): CrudController<Hero> {
return this;
}
@Override()
getMany(
@ParsedRequest() req: CrudRequest,
) {
return this.base.getManyBase(req);
}
@Override('getOneBase')
getOneAndDoStuff(
@ParsedRequest() req: CrudRequest,
) {
return this.base.getOneBase(req);
}
@Override()
createOne(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: Hero,
) {
return this.base.createOneBase(req, dto);
}
@Override()
createMany(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: CreateManyDto<Hero>
) {
return this.base.createManyBase(req, dto);
}
@Override('updateOneBase')
coolFunction(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: Hero,
) {
return this.base.updateOneBase(req, dto);
}
@Override('replaceOneBase')
awesomePUT(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: Hero,
) {
return this.base.replaceOneBase(req, dto);
}
@Override()
async deleteOne(
@ParsedRequest() req: CrudRequest,
) {
return this.base.deleteOneBase(req);
}
}

最新更新