返回文章列表 →

Note

模块

nestjs的模块介绍

发布于 更新于

Module

模块

@Module

模块控制器,为修饰对象添加元数据,告诉 NestJS 被修饰对象是一个模块

cats.module.ts

import { Module } from "@nestjs/common";
import { CatsController } from "./cats.controller";
import { CatsService } from "./cats.service";

/**
 * @Module()装饰器告诉NestJS,CatsModule是一个模块类,这个模块包含控制器:CatsController,服务:CatsService
 */
@Module({
  // 注册模块(@Module):当前模块需要使用哪些其他模块。注册后可以使用该模块中导出的内容。
  imports:[]
  // 注册控制器(@Controller): 当前模块注册哪些路由控制器
  controllers: [CatsController],
  //  注册服务(@Injectable):当前模块创建和管理哪些服务
  providers: [CatsService],
  // 导出:导出服务@Injectable,让其他模块可以使用该服务。2.导出模块@Module
  exports:[]
})
export class CatsModule {}

共享模块

exports 服务 @Injectable 导出,允许地方可以通过 imports 导入其模块来使用该服务。或者导出 模块 @Module 。注意所有其他导入该模块的模块会共享同一个实例。

@Module({
  controllers: [CatsController],
  providers: [CatsService],
  //  导出服务,其他地方可以通过imports导入 CatsModule 的模块,然后访问 CatsService。
  exports: [CatsService],
})
export class CatsModule {}

全局模块

通过 @Global() 装饰器把一个模块变为全局模块,它具有全局作用域。全局模块通常应由根模块或核心模块仅注册一次

import { Module, Global } from "@nestjs/common";
import { CatsController } from "./cats.controller";
import { CatsService } from "./cats.service";

// 把CatsModule模块定义为全局模块
@Global()
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}

动态模块