欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js模塊Modules的使用實戰(zhàn)教程

 更新時間:2023年04月14日 09:21:44   作者:zhouxiaoxiao2015  
這篇文章主要介紹了Node.js模塊Modules的使用,模塊就是一個聲明了裝飾器@Module()的類。裝飾器@Module()提供了元數據,以便讓Nest組織應用程序結構

模塊

模塊就是一個聲明了裝飾器@Module()的類。裝飾器@Module()提供了元數據,以便讓Nest組織應用程序結構。

每個應用程序至少有一個模塊,即根模塊。根模塊是 Nest 用來構建應用程序圖的起點,應用程序圖是 Nest 用來解析模塊和提供者關系和依賴關系的內部數據結構。雖然非常小的應用程序理論上可能只有根模塊,但這不是典型情況。我們想強調的是,強烈建議將模塊作為組織組件的有效方法。因此,對于大多數應用程序,生成的體系結構將使用多個模塊,每個模塊封裝一組密切相關的功能。

@Module()裝飾器采用單個對象,其屬性描述如下:

providers由 Nest 注入器實例化的提供者,并且可以至少在整個模塊中共享
controllers必須創(chuàng)建的一組控制器
imports導入模塊的列表,這些模塊導出了此模塊中所需提供者
exports由本模塊提供并應在其他模塊中可用的提供者的子集。

默認情況下,模塊封裝providers。這意味著無法注入既不是當前模塊的直接組成部分,也不是從導入的模塊導出的providers。因此,您可以將模塊中導出的providers視為模塊的公共接口或 API。

功能模塊

CatsControllerCatsService屬于同一應用程序域。由于它們密切相關,因此將它們移動到功能模塊中是有意義的。功能模塊只是組織與特定功能相關的代碼,保持代碼井井有條并建立清晰的邊界。這有助于我們管理復雜性并使用SOLID原則進行開發(fā),尤其是隨著應用程序或團隊規(guī)模的增長的時候。

為了演示這一點,我們將創(chuàng)建CatsModule

import { Module } from "@nestjs/common";
import { CatsController } from "./cats.controller";
import { CatsService } from "./cats.service";
@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

使用 CLI 創(chuàng)建模塊,只需執(zhí)行$ nest g module cats命令即可。

以上,我們已經創(chuàng)建了cats.module.ts文件,并把與這個模塊相關的所有東西都移到了cats目錄下。我們需要做的最后一件事是將這個模塊導入根模塊 (根模塊AppModule, 已經定義在app.module.ts文件內)。

import { Module } from "@nestjs/common";
import { CatsModule } from "./cats/cats.module";
@Module({
  imports: [CatsModule],
})
export class AppModule {}

目錄結構如下:

src
├──cats
│    ├──dto
│    │   └──create-cat.dto.ts
│    ├──interfaces
│    │     └──cat.interface.ts
│    ├─cats.service.ts
│    ├─cats.controller.ts
│    └──cats.module.ts
├──app.module.ts
└──main.ts

共享模塊

在 Nest 中,默認情況下,模塊是單例的,因此你可以輕松地在多個模塊之間共享同一個提供者實例。

實際上,每個模塊都是一個共享模塊,一旦創(chuàng)建就能被任意模塊重復使用。假設我們要在幾個模塊之間共享CatsService實例,則需要把CatsService放到模塊CatsModuleexports數組中,如下所示:

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,并將與導入CatsModule的所有其他模塊共享相同的實例。

模塊重新導出

如上所示,模塊可以導出其內部提供者程序。此外,他們可以重新導出導入的模塊。在下面的示例中,CommonModule既可導入,又從CoreModule導出,使其可用于導入此模塊的其他模塊。

@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 catsService: CatsService) {}
}

但是,由于[循環(huán)依賴性],模塊類不能注入到提供者中。

Global modules

如果您必須在任何地方導入同一組模塊,則可能會變得乏味。與 Nest 不同,Angular提供者在全局范圍內注冊。定義后,它們隨處可用。但是,Nest 將提供程序封裝在模塊范圍內。如果不先導入封裝模塊,則無法在其他地方使用模塊的提供程序。

當您想要提供一組開箱即用的提供程序(例如,幫助程序、數據庫連接等)時,請使用@Global() 裝飾器使模塊全局化。

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

@Global() 裝飾器使模塊全局可用。全局模塊應僅注冊一次,通常由根模塊或核心模塊注冊。在上面的例子中,CatsService提供程序將無處不在,希望注入服務的模塊不需要在其導入數組中導入CatsModule。

讓所有的模塊都成為全局模塊不是一個好的設計決策。全局模塊可用于減少必要的樣板數量。imports 通常是使模塊的 API 可供使用者使用的首選方式。

動態(tài)模塊

Nest 模塊系統(tǒng)包括一個強大的功能,稱為動態(tài)模塊。此功能使您能夠輕松創(chuàng)建可動態(tài)注冊和配置提供程序的可自定義模塊。動態(tài)模塊詳細介紹[點這里(/fundamentals/dynamic-modules)]。在本章中,我們將簡要概述以完成模塊的介紹。

下面是DatabaseModule的動態(tài)模塊定義示例:

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,
    };
  }
}

forRoot()方法可以同步或異步返回動態(tài)模塊(即通過Promise)。

模塊DatabaseModule在裝飾器@Module()中定義了一個Connection的提供者,但是此模塊的返回值還要看forRoot()方法,它返回了一系列的提供者,例如 repositories。所以,請注意動態(tài)模塊的返回值是擴展了裝飾器@Module()定義,而不是覆蓋。所以模塊DatabaseModule導出的providers,包含兩部分,一部分是靜態(tài)定義的Connection,另外一部分是forRoot()方法動態(tài)生成的 providers。

如果你想注冊一個全局的動態(tài)模塊,設置global=true即可。

{
  global: true,
  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 {}

如果你想反過來重新導出動態(tài)模塊,你可以在exports數組中省略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 {}

動態(tài)模塊一章更詳細地介紹了本主題,并包含一個工作示例。

到此這篇關于Node.js模塊Modules的使用實戰(zhàn)教程的文章就介紹到這了,更多相關Node.js模塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • node.js中的fs.unlinkSync方法使用說明

    node.js中的fs.unlinkSync方法使用說明

    這篇文章主要介紹了node.js中的fs.unlinkSync方法使用說明,本文介紹了fs.unlinkSync的方法說明、語法、接收參數、使用實例和實現源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js文件編碼格式的轉換的方法

    Node.js文件編碼格式的轉換的方法

    這篇文章主要介紹了Node.js文件編碼格式的轉換的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • koa2 數據api中間件設計模型的實現方法

    koa2 數據api中間件設計模型的實現方法

    這篇文章主要介紹了koa2 數據api中間件設計模型的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 基于websocket實現簡單聊天室對話

    基于websocket實現簡單聊天室對話

    這篇文章主要為大家詳細介紹了基于websocket實現簡單聊天室對話,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Node.js與Sails ~項目結構與Mvc實現及日志機制

    Node.js與Sails ~項目結構與Mvc實現及日志機制

    Sails是一個Node.js的中間架構,很方便的幫助我們搭建web應用程序。還有node.js與Sails日志機制在本文中也講到了,需要的朋友可以一起學習下
    2015-10-10
  • Nodejs調用WebService的示例代碼

    Nodejs調用WebService的示例代碼

    本篇文章主要介紹了Nodejs調用WebService的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 一文詳解如何在IDEA中配置Node.js

    一文詳解如何在IDEA中配置Node.js

    idea中支持運行很多種編程語言,只需要在電腦中安裝好對應的語言環(huán)境,下面這篇文章主要給大家介紹了關于如何在IDEA中配置Node.js的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • npm 常用命令詳解(小結)

    npm 常用命令詳解(小結)

    這篇文章主要介紹了npm 常用命令詳解(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • npm?install?404問題解決方案

    npm?install?404問題解決方案

    這篇文章主要給大家介紹了關于npm?install?404問題解決的相關資料,npm install命令既可以下載服務器上的模塊,也可以在本地創(chuàng)建自己的模塊,需要的朋友可以參考下
    2023-08-08
  • Koa2微信公眾號開發(fā)之本地開發(fā)調試環(huán)境搭建

    Koa2微信公眾號開發(fā)之本地開發(fā)調試環(huán)境搭建

    本篇文章主要介紹了Koa2微信公眾號開發(fā)之本地開發(fā)調試環(huán)境搭建,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05

最新評論