注:此文仅记录博主初次学习nestjs之后的认识和理解,经验尚浅,文章内容仅供参考,如若有误,敬请指正。
多模块应用结构
0.多模块目录结构示例
src
├──cats
│ ├──dto
│ │ └──create-cat.dto.ts
│ ├──interfaces
│ │ └──cat.interface.ts
│ ├─cats.service.ts
│ ├─cats.controller.ts
│ └──cats.module.ts
├──dogs
│ ├──dto
│ │ └──create-dog.dto.ts
│ ├──interfaces
│ │ └──dog.interface.ts
│ ├─dogs.service.ts
│ ├─dogs.controller.ts
│ └──dogs.module.ts
├──app.module.ts
└──main.ts
1.模块划分和定义
模块划分
- 划分原则:后端通常对一个业务对象的增删改查等操作的完整业务流程(三层)进行统一管理,在nestjs中,统一管理不仅仅是将相关的所有资源放入同一个文件夹,而且引入了模块作为管理单位。
- nestjs模块主要内容:模块管理文件、三层架构实现文件(controller、service、dao)、相关pojo类文件(dto、vo、bo、do)
普通 / 全局模块案例
- 模块管理文件
import {
Module, Global } from '@nestjs/common';
import {
CatsController } from './cats.controller';
import {
CatsService } from './cats.service';
// @Global()// 全局模块,应该只注册一次,最好由根或核心模块注册。
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService],
})
export class CatsModule {
}
2.模块整合
- 根模块(app.module.ts)
import {
Module } from '@nestjs/common';
import {
CatsModule } from './cats/cats.module';
import {
DogsModule } from './dogts/dogs.module';
@Module({
imports: [CatsModule , DogsModule],
})
export class ApplicationModule {
}
3.模块通信
模块数据的私有与暴露
import {
Module } from '@nestjs/common';
import {
CatsController } from './cats.controller';
import {
CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService]// 模块暴露:引入CatsModule模块的其它模块可以访问CatsService。模块私有:模块未暴露的即为私有
})
export class CatsModule {
}
模块之间的引入与导出
// 在核心模块下引入并导出公共模块
@Module({
imports: [CommonModule],
exports: [CommonModule],
})
export class CoreModule {
}