nestjs中比较重要的几个概念controller,module,service,每个nestjs的模块都有以上3个基本文件组成。
module:是用来对外暴露当前模块,以及该模块下需要用到的controller和service都需要在module中引入并注册,最终在app.module中集中引入。
controller:nestjs作为web服务对外暴露请求接口路径,controller就是用来处理这些请求路径的控制器,一个controller对应一个模块模块下有多个具体接口。
service:controller中每个独立请求的具体处理逻辑,每个controller在使用service的时候需要在constructor注入该service。
这里有个小技巧:通过一下nest命令可以直接生成模块对应的完整文件夹以及相应的模板代码其中name是对应的模块名。
nest g resource <name>
基本目录结构如下:
module
需要用@module装饰器进行装饰
import { Module } from '@nestjs/common';
import { NestjsService } from './nestjs.service';
import { NestjsController } from './nestjs.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { nest } from '../db/modal/nest.entity';
import { GoodsMaterial } from '../db/modal/goods.entity';
import { nesttest } from '../db/modal/nesttest.entity';
@Module({
controllers: [NestjsController],
providers: [NestjsService],
imports: [
TypeOrmModule.forFeature([GoodsMaterial]),
TypeOrmModule.forFeature([nest, nesttest], 'nest')
],
})
export class NestjsModule {}
controller
需要用@Controller装饰器进行装饰
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
Query,
} from '@nestjs/common';
import { NestjsService } from './nestjs.service';
@Controller('nest')
export class NestjsController {
constructor(private readonly nestjsService: NestjsService) {}
@Post()
create(@Body() createNestjDto: any) {
return this.nestjsService.create();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.nestjsService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateNestjDto: any) {
return this.nestjsService.update(+id);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.nestjsService.remove(+id);
}
}
service
需要用@Injectable装饰器进行装饰,一般在service中进行数据库的操作
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { nest } from '../db/modal/nest.entity';
import { nesttest } from '../db/modal/nesttest.entity';
import { GoodsMaterial } from '../db/modal/goods.entity';
@Injectable()
export class NestjsService {
constructor(
@InjectRepository(nest, 'nest')
private nestRepository: Repository<nest>,
@InjectRepository(nesttest, 'nest')
private nesttestRepository: Repository<nesttest>,
@InjectRepository(GoodsMaterial)
private goodsMaterialRepository: Repository<nest>,
) {}
save(obj: any) {
return this.nestRepository.save(obj);
}
find(id: any) {
return this.nestRepository.findOne({ where: { id } });
}
savetest(obj: any) {
return this.nesttestRepository.save(obj);
}
findtest(id: any) {
return this.nesttestRepository.findOne({ where: { id } });
}
findList() {
return this.goodsMaterialRepository.find();
}
}