【发布时间】:2020-09-07 21:07:04
【问题描述】:
我正在开发一个 Node/Express 项目。大多数代码都包含在文件夹内的文件中,因此名为“控制器”的文件夹包含项目的所有控制器,名为“服务”的文件夹包含项目的所有服务等。启动服务器的代码在里面一个名为 app.js 的文件,它直接位于项目根目录中。
所有控制器和服务都被声明为 JS 类并包含一个构造函数。 Dotenv 在 app.js 中加载,并且 env 变量在任何地方都可以很好地工作,但在类构造函数中,因为它们似乎是在 dotenv 初始化之前加载的。
使用的类语法示例:
export default class exampleService {
constructor() {
console.log('This is not working', process.env.EXAMPLE); // process.env.EXAMPLE is undefined
}
myFunction() {
console.log('This works just fine', process.env.EXAMPLE); // process.env.EXAMPLE is exactly how it's defined in .env
}
// All other class methods are here.
}
有没有办法让 dotenv 变量在类构造函数中工作不必在每个类文件的开头导入和初始化 dotenv?
如果我确实将 dotenv 单独导入到每个类文件中,除了使代码不那么干净之外,它还有其他缺点吗?
【问题讨论】:
-
来自dotenv's docs:“尽早在您的应用程序中,要求并配置 dotenv。
require('dotenv').config()” - 您是否尝试将其添加为 server.js/app.js 中的第一个导入(或您的 package.json 指向的任何文件)? -
@alfasin 我做到了,是的。即使
import dotenv from 'dotenv';和const env = dotenv.config();是 app.js 中的第一行,env 变量在构造函数中也不起作用。 -
您是否在 dotenv 上使用 preload 加载应用程序?
-
@alfasin 我不是。不过,我现在是,因为预加载显然解决了这个问题。谢谢!您想发布有关 .env 预加载的答案,以便我将其标记为解决方案吗?
标签: javascript node.js express dotenv