簡體   English   中英

環境變量未加載到 Nodejs 中的 process.env

[英]Environment Variables not loading to process.env in Nodejs

我正在構建一個 nodejs api 並將dotenv包設置為開發依賴項,以將變量加載到開發人員本地機器上的process.env

請注意,當我登錄時,我使用sudo -i作為root進行操作。

我的意圖是在部署期間,環境變量將在我的 Ubuntu 主機中的/etc/environment下設置,直接加載到進程中,然后應用程序將只針對該配置運行。

為此,我在server.js的開頭有一行:

if(process.env.NODE_ENV === 'development') {
    logger.info("Loading dotenv for development environment")
    require('dotenv').config();
}

並且開發人員將被指示為NODE_ENV添加一個環境變量到他們的系統中。

現在,在我的 Ubuntu EC2 實例中,我已經設置了/etc/environment以擁有我想要的環境變量(請注意,這里的 NODE_ENV 是 'dev' 只是為了避免運行 dotenv):

PORT=MYPORT
NODE_ENV=dev
APP_SECRET_KEY='MYSECRET'
APP_DATABASE_LOGIN=MYLOGIN
APP_DATABASE_PASSWORD='MYPASS'
APP_DATABASE_HOST=MYHOST
APP_DATABASE_NAME=MYDB
APP_DATABASE_PORT=MYDBPORT

當我重新啟動並運行printenv它們都按文件填充。

我已將pm2設置為直接從server.js運行我的應用程序,無需任何額外配置,因為據我所知, process.env是從環境變量自動填充的。

但是,當我從 process.env 記錄值時,我只會為所有內容獲取 null:

logger.info({
    connectionConfig: {
        host: process.env.APP_DATABASE_HOST
        , login: process.env.APP_DATABASE_LOGIN
        , port: process.env.APP_DATABASE_PORT
        , databaseName: process.env.APP_DATABASE_NAME
    }
});

這里的配置有問題嗎?

注意:根據下面的答案,我在啟動 pm2 后錯誤地設置了我的環境變量,因此 pm2 緩存丟失了它們

問題是pm2緩存了環境變量。

你必須要做:

# all apps
pm2 restart all --update-env
# specific app
pm2 restart {pid} --update-env

如果由於某種原因不起作用,記錄的方式是:

pm2 reload ecosystem.json --update-env

你可以在這里閱讀更多:

我遇到了同樣的問題,這是因為 Visual Studio 和 Visual Studio 代碼中的集成終端,除非您在管理模式下運行編輯器,否則它們似乎無法訪問任何這些變量。所以要解決這個問題,您只需要在 Amin 模式下啟動你的編輯器

確保您在 app.js 文件中有此代碼

> const path = require('path');  require('dotenv').config({ path:
> path.join(__dirname, '.env') });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM