杭州网站建设兼职谷歌浏览器下载电脑版
脚手架中,可以执行 nest g mo XXX
创建模块。通过脚手架命令创建的模块,会自动被导入至根模块注册。
注意:项目中的模块都需要导入到根模块中注册一下才能被使用。
共享模块
nest g res boy
、nest g res girl
如果希望在 girl
模块中使用 boy
模块,需要先在 boy
模块将其 service 导出
import { Module } from '@nestjs/common';
import { BoyService } from './boy.service';
import { BoyController } from './boy.controller';@Module({controllers: [BoyController],providers: [BoyService],exports: [BoyService], // 导出 boy service
})
export class BoyModule {}
然后在 girl
模块注册 boy
模块
import { Module } from '@nestjs/common';
import { GirlService } from './girl.service';
import { GirlController } from './girl.controller';
import { BoyModule } from 'src/boy/boy.module';@Module({controllers: [GirlController],providers: [GirlService],imports: [BoyModule], // 注册 boy 模块
})
export class GirlModule {}
现在就可以在 girl
controller 中注入 boy
service 并使用啦~
import { Controller, Get } from '@nestjs/common';
import { GirlService } from './girl.service';
import { BoyService } from 'src/boy/boy.service';@Controller('girl')
export class GirlController {constructor(private readonly girlService: GirlService,private readonly boyService: BoyService, // 注入 boy service) {}@Get()findAll() {const result = `${this.boyService.findAll()} and ${this.girlService.findAll()}`;return result;}
}
全局模块
可以使用 @Global()
修饰 boy
模块并导出其 service
import { Global, Module } from '@nestjs/common';
import { BoyService } from './boy.service';
import { BoyController } from './boy.controller';@Global() // 使用 @Global() 修饰 boy 模块
@Module({controllers: [BoyController],providers: [BoyService],exports: [BoyService], // 导出 service
})
export class BoyModule {}
现在就可以在 任意
controller 中注入 boy
service 并使用啦~
动态模块
如果需要给模块传入参数,则可以使用动态模块
给该模块添加一个静态方法,来接收参数。@Module()
的配置对象的内容都可以移到静态方法的返回值中
import { DynamicModule, Module } from '@nestjs/common';
import { BoyService } from './boy.service';
import { BoyController } from './boy.controller';@Module({/* 配置对象的内容都可以移到静态方法的返回值中 */
})
export class BoyModule {// 编写静态方法, 接收参数static forRoot(option: string): DynamicModule {return {module: BoyModule,controllers: [BoyController],providers: [BoyService, { provide: 'boy', useValue: option }],exports: [BoyService, { provide: 'boy', useValue: option }],global: true, // 等效于 @Global(); 默认为 false};}
}
在根模块 app
module 中注册动态模块并传入参数
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoyModule } from './boy/boy.module';
import { GirlModule } from './girl/girl.module';@Module({controllers: [AppController],providers: [AppService],imports: [BoyModule, GirlModule, BoyModule.forRoot('superman')], // 注册模块并传入参数
})
export class AppModule {}
现在就可以在 任意
controller 中注入动态模块并使用啦~
import { Controller, Get, Inject } from '@nestjs/common';
import { GirlService } from './girl.service';
import { BoyService } from 'src/boy/boy.service';@Controller('girl')
export class GirlController {constructor(private readonly girlService: GirlService,private readonly boyService: BoyService,@Inject('boy') private readonly boy: string, // 注入动态模块) {}@Get()findAll() {const { boyService, girlService, boy } = this;const result = `${boyService.findAll()} + ${girlService.findAll()} + ${boy}`;return result;}
}