簡體   English   中英

如何在nest.js 中使用全局變量?

[英]How to use global variables in nest.js?

以配置為例,Nest.js 文檔提倡注冊 Config Modules 並以依賴注入的方式注入到其他模塊中。

好處很明顯,依賴和代碼也很清楚,但是如果我有一個nest.js項目需要在啟動時調用配置信息呢? 這實際上給我帶來了麻煩。

我的想法是使用存儲(實際上是閉包)來管理全局可能需要的所有變量、客戶端鏈接對象、在啟動時注冊並在需要時引入。

當相應的變量以這種方式注冊時,它們可以在任何地方引入。 缺點是您需要自己管理依賴項。

有了上面demo的概念設計: https://github.com/sophons-space/nest-server

請幫我糾正,我還是個菜鳥。

創建一個文件 global.service.ts (在文件夾中,您可以將其命名為 utils 或其他名稱)並將代碼放在下面

export class GlobalService{ 
   static globalVar: any; 
}

將值設置為 globalVar

GlobalService.globalVar = 'some value';

從 globalVar 中獲取值

console.log(GlobalService.globalVar);

注意不要忘記在任何你想使用的地方導入 GlobalService。

您可以使用一般的 NodeJS 方法

global.SomeGlobalVariableName = 'SomeGlobalVariableValue';

console.log(SomeGlobalVariableName);

如果你想使用 Nest 流,它應該在configuration文件中定義

// app.module.ts
import configuration from './config/configuration';

imports: [
// first import as first initialization
  ConfigModule.forRoot({
    isGlobal: true, // to get access to it in every component
    load: [configuration],
  }),
]
...
// configuration.ts
export default (): any => {
  return {
    someGlobalConfigVariable: parseInt(process.env.PORT, 10) || 3000,
  };
};

處理這種情況的方式類似於 NestJS 庫或集成通常處理配置的方式; 使用基本模塊上的方法。

main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  // Note the `configure`-method
  const app = await NestFactory.create(AppModule.configure({
    myConfig: 'value',
  });
  await app.listen(3000);
}
bootstrap();

app.module.ts

import { DynamicModule } from '@nestjs/common';


export class AppModule {
  static configure(config): DynamicModule {
     return {
       module: AppModule,
       providers: [{ provide: 'CONFIG', useValue: config }],
       // ....
     }
  }
}

我使用的方法是在 yaml 文件中使用我的配置變量,然后使用配置 package 在我的 Nestjs 項目中的任何位置獲取這些變量或對象。 例如在 default.yml 文件key: value中,然后在我想使用它的文件中

import config from 'config';
let value = config.get<string>('key');

你可以從這里的這個 npmjs 鏈接中獲取這個 pkg

為什么不使用更多 NestJs 方式的 go 即提供實例 scope

此處發布的大多數答案都是正確且易於實現的,但我有一種更通用的方法來定義適合 NestJs 的變量(Nestjs Scope 和依賴注入流程) 如果需要,我很樂意分享示例代碼

腳步

  1. 創建提供者
  2. 向此提供程序添加一個私有實例變量 - 而不是 class 變量(即 static 變量)使用實例變量作為 NestJs 自動(默認情況下)以 Z2ED500A3529637175E675A8791 的單個實例共享的方式管理其提供程序的實例整個應用程序。 在此處閱讀有關范圍的更多信息
  3. 為該變量添加 get/set 和其他方法
  4. 在需要全局變量的任何地方注入該提供者(提供者的實例變量(每個實例)。

其他方法

  1. 配置 - 預定義類型(如字符串、數字...)的首選
  2. util.ts 文件中的 Static 變量
  3. 本機全局變量 - 我不推薦這個(解釋在問題的 scope 之外)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM