Module - 把所有東西都打包在一起

關於 Module

最後一位 Module,它的作用最主要就是可以把 Controller 和 Provider 整合在一起輸出成一個模組,如此ㄧ來在上層引用的時候就不需要再把為數眾多的 Controller 和 Provider 都抓進來,可以單純的引入各個模組,一方面是讓功能的插入方式更簡潔,一方面也能在部分功能出現問題是快速的卸除。

創建 Module

透過 CLI 指令 nest g module <name> 我們一樣可以快速地將 Module 建立起來,會自動的將 module.ts 檔案放到對應的目錄底下。

Module 的四大參數

在 Module 當中,我們會在 @Module() 裡將所需要的東西帶入進來,主要會用到的四大參數分別是 importsexportscontrollersproviderscontrollersproviders 主要的目的就是將想要放入該模組的 Controller 和 Provider 加入整合進來,例如:

@Module({
  controllers: [ComputersController],
  providers: [ComputersService],
})
export class ComputersModule {}

也可以透過 exports 來將ㄧ些 provider 或甚至 module 分享出去給其它模組使用:

@Module({
  controllers: [ComputersController],
  providers: [ComputersService],
  exports: [ComputersService]
})
export class ComputersModule {}

接下來就可以將這個模組在其他地方使用 imports 進行引用,然後在其它模組中的 Service 或 Controller 當中,就能夠引用 ComputersService 並調用裡面所定義的函式:

@Module({
  imports: [ComputersModule]
})

全域參數

如果想要將一個模組進行全域化,使得其它任何模組都可以直接引用的話,可以再加上 @Global() 這個裝飾器來達成,不過以模組設計的架構來看並不是一個非常推薦的作法

@Global()
@Module({
  controllers: [ComputersController],
  providers: [ComputersService],
  exports: [ComputersService]
})
export class ComputersModule {}

Copyright© 2026 ZeoXer. All Rights Reserved.