• Nest


    $ nest g module cats
    

    @Module() 装饰器的类

    import { Module } from '@nestjs/common';
    import { CatsController } from './cats.controller';
    import { CatsService } from './cats.service';
    
    @Module({
      controllers: [CatsController],
      providers: [CatsService],
    })
    export class CatsModule {}
    

    image
    @module() 装饰器接受一个描述模块属性的对象

    providers 由 Nest 注入器实例化的提供者,并且可以至少在整个模块中共享
    controllers 必须创建的一组控制器
    imports 导入模块的列表,这些模块导出了此模块中所需提供者
    exports 由本模块提供并应在其他模块中可用的提供者的子集。

    创建了 cats.module.ts 文件,并把与这个模块相关的所有东西都移到了 cats 目录下。我们需要做的最后一件事是将这个模块导入根模块 (ApplicationModule)

    app.module.ts

    import { Module } from '@nestjs/common';
    import { CatsModule } from './cats/cats.module';
    
    @Module({
      imports: [CatsModule],
    })
    export class ApplicationModule {}
    

    共享模块

    每个模块都可以是一个共享模块
    1、导出
    把 CatsService 放到 exports 数组中

    cats.module.ts

    import { Module } from '@nestjs/common';
    import { CatsController } from './cats.controller';
    import { CatsService } from './cats.service';
    
    @Module({
      controllers: [CatsController],
      providers: [CatsService],
      exports: [CatsService]
    })
    export class CatsModule {}
    

    现在,每个导入 CatsModule 的模块都可以访问 CatsService ,并且它们将共享相同的 CatsService 实例

    模块导出

    模块可以导出他们的内部提供者。 而且,他们可以再导出自己导入的模块

    @Module({
      imports: [CommonModule],
      exports: [CommonModule],
    })
    export class CoreModule {}
    

    依赖注入

    提供者也可以注入到模块(类)中,由于循环依赖性,模块类不能注入到提供者中

    import { Module } from '@nestjs/common';
    import { CatsController } from './cats.controller';
    import { CatsService } from './cats.service';
    
    @Module({
      controllers: [CatsController],
      providers: [CatsService],
    })
    export class CatsModule {
      constructor(private readonly catsService: CatsService) {}
    }
    

    全局模块 - @Global

    @Global装饰器使模块成为全局作用域。 全局模块应该只注册一次,最好由根或核心模块注册。 在上面的例子中,CatsService 组件将无处不在,而想要使用 CatsService 的模块则不需要在 imports 数组中导入 CatsModule。

    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 {}
    

    使一切全局化并不是一个好的解决方案。 全局模块可用于减少必要模板文件的数量。 imports 数组仍然是使模块 API 透明的最佳方式

    动态模块

    可以动态注册和配置提供程序
    eg: 动态生成的存储库提供程序
    forRoot() 可以同步或异步(Promise)返回动态模块

    import { Module, DynamicModule } from '@nestjs/common';
    import { createDatabaseProviders } from './database.providers';
    import { Connection } from './connection.provider';
    
    @Module({
      providers: [Connection],
    })
    export class DatabaseModule {
      static forRoot(entities = [], options?): DynamicModule {
        const providers = createDatabaseProviders(options, entities);
        return {
          module: DatabaseModule,
          providers: providers,
          exports: providers,
        };
      }
    }
    

    DatabaseModule 导入,并且被配置以下列方式

    import { Module } from '@nestjs/common';
    import { DatabaseModule } from './database/database.module';
    import { User } from './users/entities/user.entity';
    
    @Module({
      imports: [DatabaseModule.forRoot([User])],
    })
    export class AppModule {}
    

    重新导出动态模块,则可以 forRoot() 在导出数组中省略方法调用

    import { Module } from '@nestjs/common';
    import { DatabaseModule } from './database/database.module';
    import { User } from './users/entities/user.entity';
    
    @Module({
      imports: [DatabaseModule.forRoot([User])],
      exports: [DatabaseModule],
    })
    export class AppModule {}
    
  • 相关阅读:
    编译freeglut-3.0.0的Windows版静态库,及其使用示例
    关于网络安全与实名上网的通知
    【机器学习库】mlpack 2.1.1 Ubuntu14.0.4 踩坑记录
    【OpenCV】在Linux下用CMAKE编译安装OpenCV3.2.0
    【Python装饰者】在函数测试的作用
    【校验】TCP和UDP的校验和
    【C++设计模式】单件类与DCLP(Double Check Lock Pattern)的风险
    【爬虫】Python2 爬虫初学笔记
    【统计学习】SVM之超平面方程来源
    【滤波】标量Kalman滤波的过程分析和证明及C实现
  • 原文地址:https://www.cnblogs.com/zzghk/p/15225783.html
Copyright © 2020-2023  润新知