我在我的mac上使用环境变量来存储一些敏感的凭据,并试图通过Node访问它们。我将它们添加到我的环境配置文件中export VARIABLE_NAME=mySensitiveInfo
当我使用echo $VARIABLE_NAME
时,我收到了正确的输出(我的敏感信息)。
然而,当我试图用process.env.VARIABLE_NAME
访问Node中的这个变量并试图在控制台上打印出来时,我得到了一个undefined。
其他的环境变量看起来都没问题。例如,当I console.log(process.env.FACEBOOK_CALLBACK_URL)
时,它会将正确的值打印到我的控制台。我前几天添加了FACEBOOK_CALLBACK_URL。
我需要重新启动我的机器或其他东西吗?环境变量在Node中可用需要一定的时间吗?我在SO上看到的最接近的答案是this post,但没有人能够弄清楚为什么会发生这种情况。
8条答案
按热度按时间xmjla07d1#
nodemon.json
文件仅用于设置nodemon特定的配置,因此可以使用dotenv包来创建自定义环境变量首先,安装dotenv包
之后创建。root文件中的env文件,并将环境变量包括为波纹管
最后,在
app.js
文件中,在导入之后插入。然后你可以像这样使用环境变量
hmae6n7t2#
process.env.VARIABLE_NAME
返回undefined
,因为节点。js执行环境还不知道新添加的VARIABLE_NAME
。为了解决这个问题,节点。js执行环境(e.IDE)需要重新启动。以下步骤可用于重现此问题:
1.打开IDE(如WebStorm)并编写一个简单的Node。js程序:
console.log(process.env.VARIABLE_NAME)
.它将按预期打印undefined
,因为VARIABLE_NAME
尚未定义。保持IDE运行,不要关闭它。1.打开环境配置文件,如
.bash_profile
,并在其中添加export VARIABLE_NAME=mySensitiveInfo
。1.打开系统控制台,运行
source .bash_profile
,执行上面的export
语句。从现在开始,只要打开系统控制台,就会存在VARIABLE_NAME
环境变量。1.在系统控制台中,执行Node。js程序在步骤1中,它将打印
mySensitiveInfo
。1.切换到IDE并执行Node。js程序,它将打印
undefined
。1.重新启动IDE并执行Node。js程序,这次会打印
mySensitiveInfo
8aqjt8rx3#
我刚才遇到了一个问题,我用这个在webpack配置中解决了
b1zrtrql4#
对于将来可能遇到这个问题并且上面的解决方案都不起作用的每个人来说,这也可能是因为您正在子文件夹或子目录中运行
node <filename>.js
,并且由于您的.env
文件位于根文件夹中,因此processs.env.<variable>
将始终返回undefined。一个简单的检查方法是尝试下面的代码👉
在控制台中,我们得到以下错误
重点是
Error: ENOENT: no such file or directory, open
。要解决这个问题,只需导航回根目录并从那里运行文件,但要从根目录指定文件的完整路径,如👉node /<subfolder>/<file.js>
mf98qq945#
请检查的目录。env文件,如果它与您的应用程序在同一个文件中。js或(abc.js)than move。env向上一级
5uzkadbs6#
对于任何陷入React的人。
article帮助我理解。React中的env:
变量必须具有前缀“REACT_APP_”,否则变量将无法正常工作。
在.env文件中,它应该看起来像这样:
而不这(我有什么,并给未定义):
qxsslcnc7#
关闭代码Runner或IDE环境一次,然后重新打开它。如果使用VS代码,请将其完全关闭。(或CMD或Power Shell或。..)
xurqigkl8#
我也有同样的问题。在我的例子中是env文件和db。js在子文件夹configs中。
在index/server中。js,在导入dotven时,我使用了
这样我的env变量就被访问了。
希望我的这个例子对你有帮助!😀