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

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

目录
相关文章
|
3月前
|
缓存 JSON JavaScript
Node.js模块系统
Node.js模块系统
25 1
|
5天前
|
JavaScript 数据可视化
JS如何优雅的实现模块自动滚动展示
【8月更文挑战第22天】JS如何优雅的实现模块自动滚动展示
11 1
JS如何优雅的实现模块自动滚动展示
|
6天前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
50 1
|
19天前
|
存储 缓存 JSON
Node.js有哪些模块系统
【8月更文挑战第12天】Node.js有哪些模块系统
28 3
|
19天前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
55 1
|
2月前
|
JavaScript 前端开发
node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)
node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)
26 1
|
2月前
|
监控 JavaScript 前端开发
Node中的AsyncLocalStorage 使用问题之Node.js内部模块和外部模块的加载的问题如何解决
Node中的AsyncLocalStorage 使用问题之Node.js内部模块和外部模块的加载的问题如何解决
|
2月前
|
JavaScript
【Node.js基础02】fs、path模块
【7月更文挑战第17天】
12 0
|
3月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
Node.js Web 模块
31 2
|
2月前
|
JSON JavaScript 前端开发
前端 JS 经典:node 的模块查找策略
前端 JS 经典:node 的模块查找策略
23 0