当前位置: 首页 > news >正文

【NestJS】模块

脚手架中,可以执行 nest g mo XXX 创建模块。通过脚手架命令创建的模块,会自动被导入至根模块注册。

注意:项目中的模块都需要导入到根模块中注册一下才能被使用。



共享模块

nest g res boynest g res girl

如果希望在 girl 模块中使用 boy 模块,需要先在 boy 模块将其 service 导出

import { Module } from '@nestjs/common';
import { BoyService } from './boy.service';
import { BoyController } from './boy.controller';@Module({controllers: [BoyController],providers: [BoyService],exports: [BoyService], // 导出 boy service
})
export class BoyModule {}

然后在 girl 模块注册 boy 模块

import { Module } from '@nestjs/common';
import { GirlService } from './girl.service';
import { GirlController } from './girl.controller';
import { BoyModule } from 'src/boy/boy.module';@Module({controllers: [GirlController],providers: [GirlService],imports: [BoyModule], // 注册 boy 模块
})
export class GirlModule {}

现在就可以在 girl controller 中注入 boy service 并使用啦~

import { Controller, Get } from '@nestjs/common';
import { GirlService } from './girl.service';
import { BoyService } from 'src/boy/boy.service';@Controller('girl')
export class GirlController {constructor(private readonly girlService: GirlService,private readonly boyService: BoyService, // 注入 boy service) {}@Get()findAll() {const result = `${this.boyService.findAll()} and ${this.girlService.findAll()}`;return result;}
}



全局模块

可以使用 @Global() 修饰 boy 模块并导出其 service

import { Global, Module } from '@nestjs/common';
import { BoyService } from './boy.service';
import { BoyController } from './boy.controller';@Global() // 使用 @Global() 修饰 boy 模块
@Module({controllers: [BoyController],providers: [BoyService],exports: [BoyService], // 导出 service
})
export class BoyModule {}

现在就可以在 任意 controller 中注入 boy service 并使用啦~



动态模块

如果需要给模块传入参数,则可以使用动态模块

给该模块添加一个静态方法,来接收参数。@Module() 的配置对象的内容都可以移到静态方法的返回值中

import { DynamicModule, Module } from '@nestjs/common';
import { BoyService } from './boy.service';
import { BoyController } from './boy.controller';@Module({/* 配置对象的内容都可以移到静态方法的返回值中 */
})
export class BoyModule {// 编写静态方法, 接收参数static forRoot(option: string): DynamicModule {return {module: BoyModule,controllers: [BoyController],providers: [BoyService, { provide: 'boy', useValue: option }],exports: [BoyService, { provide: 'boy', useValue: option }],global: true, // 等效于 @Global();  默认为 false};}
}

在根模块 app module 中注册动态模块并传入参数

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoyModule } from './boy/boy.module';
import { GirlModule } from './girl/girl.module';@Module({controllers: [AppController],providers: [AppService],imports: [BoyModule, GirlModule, BoyModule.forRoot('superman')], // 注册模块并传入参数
})
export class AppModule {}

现在就可以在 任意 controller 中注入动态模块并使用啦~

import { Controller, Get, Inject } from '@nestjs/common';
import { GirlService } from './girl.service';
import { BoyService } from 'src/boy/boy.service';@Controller('girl')
export class GirlController {constructor(private readonly girlService: GirlService,private readonly boyService: BoyService,@Inject('boy') private readonly boy: string, // 注入动态模块) {}@Get()findAll() {const { boyService, girlService, boy } = this;const result = `${boyService.findAll()} + ${girlService.findAll()} + ${boy}`;return result;}
}



http://www.lryc.cn/news/13491.html

相关文章:

  • 隐私计算头条周刊(2.13-2.19)
  • 【STM32笔记】低功耗模式配置及避坑汇总
  • DFN: Dynamic Filter Networks-动态卷积网络
  • 面试官:你是怎样理解Fiber的
  • 【C++的OpenCV】第一课-opencv的介绍和安装(Linux环境下)
  • k8s安装tekton,编写task
  • K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示
  • 还真不错,今天 Chatgpt 教会我如何开发一款小工具开发(Python 代码实现)
  • Boom 3D最新版本下载电脑音频增强应用工具
  • redis-如何保证数据库和缓存双写一致性?
  • 系列二、核心概念运行流程
  • 恢复 iPhone 和 iPad 数据的 10 种简单工具
  • 经理与员工工资关系-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)
  • Micropython ESP32配置与烧录版本
  • java面试题-并发关键字(Synchronized,volatile,final)
  • 【笔试强训】Day_02
  • DepGraph:适用任何结构的剪枝
  • 【结构体版】通讯录
  • Debezium系列之:基于debezium采集数据到kafka,再从kafka将数据流式传输到下游数据库
  • 【2023】华为OD机试真题Java-题目0217-上班之路
  • 基于spring生态的基础后端开发及渗透测试流程(二)
  • Python语言零基础入门教程(二十六)
  • 人们最想看到的是:你在坚持什么?
  • 300行代码手写spring初体验v1.0版本
  • 100天精通Python(数据分析篇)——第76天:Pandas数据类型转换函数pd.to_numeric(参数说明+实战案例)
  • 链表(超详细--包教包会)
  • 爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例
  • Ubuntu20.04如何安装虚拟机(并安装Android)
  • 【腾讯一面】我对我的Java基础不自信了
  • 前端都在聊什么 - 第 2 期