【问题标题】:process.env.varible undefined in nest.js在nestjs中未定义process.env.variable
【发布时间】:2021-07-10 23:34:12
【问题描述】:

我正在使用nest.js,我想导入在 auth.parameters.ts 文件中定义的对象。文件定义如下。除非在类中声明了以下变量,否则环境变量似乎不可见。

export const obj = {
    somevar : process.env.CUSTOM_VAR,

}; 

在我的其他课程中,我想使用 import {SecurityParameters } from '../auth/auth.parameters' 导入文件

并使用 console.log(SecurityParameters.somevar) 访问变量。

我可以使用 process.env.CUSTOM_VAR 或直接访问变量

如果我在其他文件中使用 somevar : process.env.CUSTOM_VAR,我会得到未定义。

【问题讨论】:

  • 您是否使用.env 文件、dotenv@nestjs/config?我们需要更多信息。
  • 是的,我使用 .env 文件。我认为 process.env 变量只在课堂上有效。如果对象未在类中声明,则不可见。
  • 如何从.env 文件中填充process.envdotenv@nestjs/config 或其他完全不同的东西?
  • 我使用 .env 进行填充,并且我在 app.module.ts 中有 @nestjs/config 并将 isGobal 设置为 true。我的环境变量在所有文件中都可见,除了定义 const obj 的文件
  • 这意味着在加载@nestjs/config 之前,某些模块会加载/导入'../auth/auth.parameters',但它是在您的类被实例化时加载的。

标签: javascript node.js nestjs


【解决方案1】:

当您使用 Nest 的 ConfigModule 时,除非您正在创建 custom config file,否则您不应该使用 process.env 做任何事情。相反,您应该在需要环境变量的地方注入 Nest 的 ConfigService 并使用 this.configService.get('CUSTOM_VARIABLE')(或您需要的任何值)。要开始使用此功能,您需要导入配置模块

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}

您可以将{ isGlobal: true } 传递给forRoot() 调用,以使ConfigService 可在应用程序的任何位置注入。

如果您想要一种不同的方法,可以使用process.env 对象,您可以将其添加为main.ts前两行

import { config } from 'dotenv';
config();

Nest 在 ConfigService 的底层调用了这个(或类似的东西),但这并不能立即提供它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2021-11-23
    • 2021-10-17
    • 2021-03-09
    • 2018-10-28
    • 2021-07-30
    • 2020-08-25
    相关资源
    最近更新 更多