Module - 把所有東西都打包在一起
關於 Module
最後一位 Module,它的作用最主要就是可以把 Controller 和 Provider 整合在一起輸出成一個模組,如此ㄧ來在上層引用的時候就不需要再把為數眾多的 Controller 和 Provider 都抓進來,可以單純的引入各個模組,一方面是讓功能的插入方式更簡潔,一方面也能在部分功能出現問題是快速的卸除。
創建 Module
透過 CLI 指令 nest g module <name> 我們一樣可以快速地將 Module 建立起來,會自動的將 module.ts 檔案放到對應的目錄底下。
Module 的四大參數
在 Module 當中,我們會在 @Module() 裡將所需要的東西帶入進來,主要會用到的四大參數分別是 imports、exports、controllers 和 providers。controllers 和 providers 主要的目的就是將想要放入該模組的 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 {}