Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使.env变量在JS类构造函数中工作?_Javascript_Node.js_Express_Dotenv - Fatal编程技术网

Javascript 如何使.env变量在JS类构造函数中工作?

Javascript 如何使.env变量在JS类构造函数中工作?,javascript,node.js,express,dotenv,Javascript,Node.js,Express,Dotenv,我正在做一个Node/Express项目。大多数代码都包含在文件夹中的文件中,因此名为“controllers”的文件夹包含项目的所有控制器,名为“services”的文件夹包含项目的所有服务等。启动服务器的代码位于名为app.js的文件中,该文件直接位于项目根目录中 所有控制器和服务都声明为JS类并包含构造函数。Dotenv在app.js中加载,env变量在任何地方都能很好地工作,但在类构造函数中除外,因为这些变量似乎是在Dotenv初始化之前加载的 使用的类语法示例如下: export de

我正在做一个Node/Express项目。大多数代码都包含在文件夹中的文件中,因此名为“controllers”的文件夹包含项目的所有控制器,名为“services”的文件夹包含项目的所有服务等。启动服务器的代码位于名为
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导入到每个类文件中,除了使代码不那么干净之外,还会有其他缺点吗?

尝试使用on dotenv(从源代码复制)加载应用程序:

预加载

可以使用--require(-r)命令行选项预加载dotenv。这样,您就不需要在应用程序代码中要求并加载dotenv。这是使用导入而不是require时的首选方法

$ node -r dotenv/config your_script.js
以下配置选项作为命令行参数受支持,格式为
dotenv\u config\u=value

$ node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/your/env/vars
此外,可以使用环境变量设置配置选项。命令行参数将位于这些参数之前

$ DOTENV_CONFIG_<OPTION>=value node -r dotenv/config your_script.js
$ DOTENV_CONFIG_ENCODING=latin1 node -r dotenv/config your_script.js dotenv
$DOTENV\u CONFIG\u=value节点-r DOTENV/CONFIG your\u script.js
$DOTENV_CONFIG_ENCODING=latin1节点-r DOTENV/CONFIG your_script.js DOTENV

From:“尽可能早地在应用程序中,要求并配置dotenv.
require('dotenv').config()
”-您是否尝试将其作为第一个导入添加到server.js/app.js(或您的package.json指向的任何文件)?@alfasin我尝试过,是的。即使
从“dotenv”导入dotenv
const env=dotenv.config()是app.js中的第一行。env变量在构造函数中不起作用。是否使用on dotenv加载应用程序?@alfasin我没有。我现在是,虽然,因为预加载显然解决了这个问题。谢谢你想发布一个关于.env预加载的答案,这样我就可以把它标记为一个解决方案了吗?谢谢,回答得很好!对于解决此问题的其他人,如果您使用esm,请确保在esm之前要求使用dotenv:
node-r dotenv/config-r esm app.js