11_nest.js模块

简介: 11_nest.js模块

每个nest.js项目至少包含一个模块(根模块),在较大的项目中,模块的数量也随之增多,每个模块都包含有一组相互关联的功能

共享模块

可以在模块的Module装饰器内使用exports导出以便在其他模块中使用

@Module({
  controllers: [UserController],
  providers: [UserService],
  // 导出模块
  exports: [UserService],
})

对于通过imports导入的模块,不需要额外在providers中提供出去,providers只要将自身模块所对应的服务暴露出去即可

import { AppService } from './app.service';
import { DemoModule } from './demo/demo.module';
import { UserModule } from './user/user.module';
@Module({
  // 导入模块 
  imports: [DemoModule, UserModule],
  controllers: [AppController, DemoController],
  providers: [AppService],
})

controller里干三件事:导入类型、注入依赖、调用功能方法

import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
// import导入类型
import { UserService } from './user/user.service';
@Controller('api')
export class AppController {
  constructor(
    // 注入依赖
    private readonly userService: UserService,
  ) {}
  @Get()
  getHello(): string {
    // 调用方法
    return this.userService.findAll();
  }
}

全局模块

可以给模块添加@Global()装饰器让其成为全局模块,不过全局模块也要进行export才能进行访问。这里我们在src目录下新建一个config文件夹,文件夹内新建一个config.module.ts文件

import { Global, Module } from '@nestjs/common';
@Global()
@Module({
  providers: [
    {
      provide: 'Config',
      useValue: { baseURL: '/api' },
    },
  ],
  exports: [
    {
      provide: 'Config',
      useValue: { baseURL: '/api' },
    },
  ],
})
export class ConfigModule {}

这里我们导出的是一个值。同样的,在app.module.ts里注册,注意imports和controllers之间的关系

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DemoController } from './demo/demo.controller';
import { DemoModule } from './demo/demo.module';
import { UserModule } from './user/user.module';
import { ConfigModule } from './config/config.module';
@Module({
  // 注册三个模块
  imports: [DemoModule, UserModule, ConfigModule],
  // 将以上三个模块导出的部分导入到下面的模块中
  controllers: [AppController, DemoController],
  // 向app.controller.ts提供自己的服务
  providers: [AppService],
})
export class AppModule {}

接下来在demo.controller.ts中进行声明、调用即可

import { Controller, Get, Inject } from '@nestjs/common';
import { ConfigModule } from 'src/config/config.module';
import { UserService } from 'src/user/user.service';
@Controller('demo')
export class DemoController {
  constructor(
    @Inject('Config') private readonly ConfigModule: ConfigModule,
    private readonly UserModule: UserService,
  ) {}
  @Get('one')
  getAll() {
    return this.UserModule.findAll();   // user模块的findAll方法
  }
  @Get('two')
  create() {
    return this.ConfigModule;   // { baseURL: '/api' }
  }
}

以上,全局模块配置完毕

动态模块

动态模块的主要作用是给模块加上用户自己的参数,可以在模块中定义一个静态方法来接收这个参数

import { DynamicModule, Global, Module } from '@nestjs/common';
interface option {
  path: string;
}
@Global()
@Module({})
export class ConfigModule {
  // 返回类型是DynamicModule,其中必须有一个module属性
  static forRoot(option: option): DynamicModule {
    return {
      module: ConfigModule, // 名称同类名
      providers: [
        {
          provide: 'Config',
          useValue: { baseURL: '/api' + option.path },
        },
      ],
      exports: [
        {
          provide: 'Config',
          useValue: { baseURL: '/api' + option.path },
        },
      ],
    };
  }
}

在app.module.ts里注册,注意需要调一下forRoot这个方法,传入对应参数

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DemoController } from './demo/demo.controller';
import { DemoModule } from './demo/demo.module';
import { UserModule } from './user/user.module';
import { ConfigModule } from './config/config.module';
@Module({
  imports: [DemoModule, UserModule, ConfigModule.forRoot({
    path:'开枪'
  })],
  controllers: [AppController, DemoController],
  providers: [AppService],
})
export class AppModule {}

以上,动态模块就配置完毕了

目录
相关文章
|
5月前
|
JavaScript 前端开发
在Node.js中,如何合理使用模块来避免全局变量的问题?
在Node.js中,如何合理使用模块来避免全局变量的问题?
209 71
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
115 2
|
JavaScript 数据可视化
JS如何优雅的实现模块自动滚动展示
【8月更文挑战第22天】JS如何优雅的实现模块自动滚动展示
260 1
JS如何优雅的实现模块自动滚动展示
|
缓存 JavaScript 前端开发
JavaScript模块化开发:ES6模块与CommonJs的对比与应用
JavaScript模块化开发:ES6模块与CommonJs的对比与应用
243 2
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
102 0
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
88 0
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
981 1
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
存储 缓存 JSON
Node.js有哪些模块系统
【8月更文挑战第12天】Node.js有哪些模块系统
174 3
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
487 1

热门文章

最新文章