zoukankan      html  css  js  c++  java
  • 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 {}
    
  • 相关阅读:
    关于javascript with性能的一段阐述
    关于多线程传参问题
    C++ 入门简要笔记
    html中多个title
    关于大学生对抖音的使用情况调查分析报告
    eclipse如何导入lib文件夹下的包
    每周总结
    中文分词——jieba之分词后存入数据库
    软件需求与分析课堂测试十 — 软件设计师案例分析(历年软考题选取)
    2021年秋季学期课程总结及奖励加分
  • 原文地址:https://www.cnblogs.com/zzghk/p/15225783.html
Copyright © 2011-2022 走看看