Yu *_*hen 18 environment-variables node.js
我在我的mac上使用环境变量来存储一些敏感的凭据,并尝试通过Node访问它们.我将它们添加到我的环境配置文件中
export VARIABLE_NAME=mySensitiveInfo
当我使用时,echo $VARIABLE_NAME我收到正确的输出(我的敏感信息).
但是,当我尝试在Node中访问这个相同的变量process.env.VARIABLE_NAME并尝试在控制台上打印出来时,我得到一个未定义的.
其他环境变量似乎没问题.例如,当我console.log(process.env.FACEBOOK_CALLBACK_URL),它将正确的值打印到我的控制台.我几天前添加了FACEBOOK_CALLBACK_URL.
我是否必须重新启动机器?环境变量在Node中可用之前是否需要一段时间?我在SO上看到的最接近的答案是这篇文章,但没有人能够弄清楚它为什么会发生.
小智 22
对于将来可能遇到此问题并且上述解决方案都不起作用的每个人,也可能是因为您node <filename>.js在子文件夹或子目录中运行,并且由于您的.env文件位于根文件夹中,因此processs.env.<variable>将始终返回未定义。
一个简单的检查方法是尝试以下代码
const test = require('dotenv').config()
console.log(test)
Run Code Online (Sandbox Code Playgroud)
在控制台中我们得到以下错误
{ error: Error: ENOENT: no such file or directory, open 'C:\Users\vxcbv\Desktop\voisascript-auth\model\.env'
at Object.openSync (node:fs:585:3)
at Object.readFileSync (node:fs:453:35)
at Object.config (C:\Users\vxcbv\Desktop\voisascript-auth\node_modules\dotenv\lib\main.js:72:42)
at Object.<anonymous> (C:\Users\vxcbv\Desktop\voisascript-auth\model\db.js:1:32)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47 {
errno: -4058,
syscall: 'open',
code: 'ENOENT',
path: 'C:\\Users\\vxcbv\\Desktop\\voisascript-auth\\model\\.env' } }
Run Code Online (Sandbox Code Playgroud)
强调Error: ENOENT: no such file or directory, open. 要解决此问题,只需导航回根目录并从那里运行文件,但从根目录指定文件的完整路径,例如
node /<subfolder>/<file.js>
sha*_*ncs 19
process.env.VARIABLE_NAME返回,undefined因为Node.js执行环境不知道新添加的VARIABLE_NAME.要解决此问题,需要重新启动Node.js执行环境(例如IDE).
以下步骤可用于重现此问题:
console.log(process.env.VARIABLE_NAME).它将undefined按预期打印,VARIABLE_NAME尚未定义.保持IDE运行,不要关闭它..bash_profile并添加export VARIABLE_NAME=mySensitiveInfo它.source .bash_profile,以便export执行上述语句.从现在开始,无论何时打开系统控制台,都VARIABLE_NAME存在环境变量.mySensitiveInfo.undefined.mySensitiveInfo小智 18
nodemon.json 文件仅用于设置 nodemon 特定的配置,因此对于创建自定义环境变量,我们可以使用 dotenv 包
首先,安装 dotenv 包
npm install dotenv --save
Run Code Online (Sandbox Code Playgroud)
之后在 root 中创建 .env 文件并包含如下环境变量
MONGO_ATLAS_PW=xxxxx
JWT_KEY=secret
Run Code Online (Sandbox Code Playgroud)
最后,在app.js导入后在文件中插入以下内容。
require('dotenv').config()
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用环境变量
process.env.MONGO_ATLAS_PW
process.env.JWT_KEY
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到过同样的问题。就我而言,env 文件和 db.js 位于子文件夹 configs 内。
因此,在 index/server.js 中,在导入 dotven 时,我使用了
require('dotenv').config({path: './configs/.env'});
Run Code Online (Sandbox Code Playgroud)
这样我的环境变量就被访问了。
希望我的这个例子对你有帮助!
小智 5
对于任何陷入 React 的人。
\n这篇文章帮助我理解了 React 中的 .env:
\n\n\n该变量必须具有 \xe2\x80\x98\xe2\x80\x98REACT_APP_\xe2\x80\x99\xe2\x80\x99 前缀,否则变量将无法正常工作。
\n
在您的 .env 文件中,它应该如下所示:
\nREACT_APP_YOUR_VARIABLE_NAME=SOMETHING\nRun Code Online (Sandbox Code Playgroud)\n而不是这个(我拥有并给出未定义的):
\nMY_VARIABLE_NAME=SOMETHING\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
16887 次 |
| 最近记录: |