[英]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 和依賴注入流程) 。 如果需要,我很樂意分享示例代碼
腳步
其他方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.