🚩引言
在探索NestJS的生态系统时,理解模块(Modules)的概念是至关重要的第一步。NestJS,作为一个基于Node.js的现代框架,借鉴了Angular的模块化设计思路,为开发者提供了一种优雅的方式来组织和管理代码。本文将带你深入了解NestJS的模块系统,揭示其如何帮助你构建结构清晰、易于维护的应用程序。
🚩什么是 Modules?
在NestJS中,模块是应用的基本构建单元,用于封装一组相关的特性、服务、控制器和中间件。模块不仅有助于组织代码,还提供了依赖注入的上下文,使得代码更加模块化和可重用。
🚩装饰器
@Module()装饰器采用单个对象
🚩Module创建
要使用 CLI 创建模块,只需执行以下命令即可。
$ nest g module cats
创建一个模块非常简单,只需使用@Module装饰器,并指定模块的元数据。下面是一个基础的模块定义示例:
在根目录种引入对应模块
🚩Module优点
这样我们基本news模块基础的项目结构,就搭建成形,后期我们如果有很多模块基本就可以按照这种模式开发,每个模块都是相互独立,后期便于我们项目的维护,我们可以将功能的模块抽离出来做成共享模块,供其他模块调用,下面我们就了解一下如何抽离出一个共享模块。
🚩共享Module
在 Nest 中,默认情况下模块是单例,因此你可以轻松地在多个模块之间共享任何提供程序的同一实例
以news模块为例,假如我们的NewsService是一个共享的实例,我们只需要将NewsService放到 exports数组中,这样任意一个导入NewsModule的模块都可以访问NewsService,并与导入他的模块共享同一实例
🚩模块间的关系
NestJS模块之间可以形成树状结构,一个模块可以导入另一个模块,从而继承其提供的服务和控制器。这种层次化的模块设计允许你构建复杂的应用程序,同时保持代码的清晰和整洁。
🚩模块重新导出
通过imports 和 exports,模块可以导出其内部提供程序。此外,他们可以重新导出他们导入的模块
完整示例代码:
news.module.ts
import { Module } from '@nestjs/common';
import { NewsController } from './news.controller';
import { NewsService } from './news.service';
@Module({
controllers: [NewsController],
providers: [NewsService],
exports: [NewsService],
})
export class NewsModule {}
根模块
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NewsModule } from './news/news.module'; //新闻模块
@Module({
imports: [NewsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
🚩结语
NestJS的模块系统为构建高性能、可维护的后端服务提供了一个坚实的基础。通过合理地规划和使用模块,你可以将应用分解成更小的、可管理的部分,提高代码的可读性和可测试性。无论你是初学者还是经验丰富的开发者,理解NestJS的模块机制都是提升项目质量的关键一步