nestJs 模塊

文檔:

https://docs.nestjs.cn/9/modules

模塊@Module
每個 Nest 應用程序至少有一個模塊,即根模塊。

根模塊是 Nest 開始安排應用程序樹的地方。

事實上,根模塊可能是應用程序中唯一的模塊,

特別是當應用程序很小時,但是對於大型程序來說這是沒有意義的。

在大多數情況下,您將擁有多個模塊,每個模塊都有一組緊密相關的功能

基本用法-功能模塊

當我們使用nest cli 工具 創建一個CURD模板的時候 nestjs 會自動幫我們引入模塊

nest g res module1

image-20230331163546615

所以我們一般不用自己引入

共享模塊

例如 user 的 Service 想暴露給 其他模塊使用就可以使用exports 導出該服務

例:

exports:[UserService]

image-20230331170056908

由於App.modules 已經引入過該模塊 就可以直接使用user 模塊的 Service

image-20230331164923214

在app.controller 中使用

image-20230331164519844

全局模塊

@Global()

我們給 user 模塊添加 @Global() 他便註冊爲全局模塊

image-20230331171410949

在其他模塊使用無須在module import 導入

image-20230331172300152

動態模塊

動態模塊主要就是爲了給模塊傳遞參數 可以給該模塊添加一個靜態方法 用來接受參數

例:

創建模塊config

nest g mo config

image-20230331174339365

config 模塊實現

import { DynamicModule, Global, Module } from '@nestjs/common';

// 定義 Options
interface Options {
  path: string
}

@Global()
@Module({})
export class ConfigModule {
  static forRoot(options: Options): DynamicModule {
    return {
      module: ConfigModule,
      providers: [
        {
          provide: "Config",
          useValue: { baseApi: "/api" + options.path }
        }
      ],
      exports: [
        {
          provide: "Config",
          useValue: { baseApi: "/api" + options.path }
        }
      ]
    }
  }

}

引入使用

在其他模塊中引入

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsController } from './cats/cats.controller';
import { MakaloModule } from './makalo/makalo.module';
import { UploadModule } from './upload/upload.module';
import { UserModule } from './user/user.module';
import { Module1Module } from './module1/module1.module';
import { ConfigModule } from './config/config.module';

@Module({
  imports: [MakaloModule, UploadModule, UserModule, Module1Module,
    ConfigModule.forRoot({path: '/makalo'})
  ],
  controllers: [AppController, CatsController],
  providers: [AppService],
})
export class AppModule {}

image-20230331180045051

由於 使用了 @Global() ,直接在 app.controller 中使用即可

例:

import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
import { UserService } from './user/user.service';

@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    @Inject('Config') private readonly baseApi: string
  ) {}

  @Get()
  getHello(): string {
    return this.baseApi;
  }
}

訪問

image-20230331180957466

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章