簡體   English   中英

在 nodejs 中用於測試和開發的不同環境變量

[英]Different env variables for testing and development in nodejs

我在空閑時間開發一個nodejs api,我現在正在嘗試實施測試。 我目前正在從 a.env 文件(使用dotenv加載)加載我的環境變量,其中包括用於我的開發 mongodb 數據庫的DB_URIDB_USERDB_PASSWORD

現在,我想為測試創建一個單獨的數據庫,但是我不知道如何加載不同的變量來連接到測試數據庫而不是開發數據庫。 我部署到 Heroku,我在那里有不同的環境變量,所以這很好。

我試圖在網上找到一些最佳實踐的答案,但我一直找不到。 我想創建一個不同的 .env 文件,但是根據npmjs 上的文檔不推薦這樣做。 .

推薦的其他資源推薦在 package.json 腳本中對我需要的特定變量進行硬編碼。 但是,如果我必須更改連接到不同數據庫所需的所有變量,腳本會很大。

我可以得到一些幫助來理解我應該如何做嗎?

謝謝!

PS:如果需要,我將使用mochasupertest進行測試。

  1. 在 .env 文件中,為每個環境添加變量:

     DB_URI_DEVELOPMENT="https://someuri.com" DB_USER_DEVELOPMENT=someuser DB_PASSWORD_DEVELOPMENT=somepassword DB_URI_TEST="https://otheruri.com" DB_USER_TEST=otheruser DB_PASSWORD_TEST=otherpassword


  1. 啟動development的應用程序:

     NODE_ENV=development node server.js

    或在test

     NODE_ENV=test node server.js


  1. 訪問此環境的環境變量:

     // don't try to load .env file on Heroku if (process.env.NODE_ENV !== 'production') { require('dotenv').config() } // get the current environment var env = process.env.NODE_ENV // convert to uppercase var envString = env.toUpperCase() // access the environment variables for this environment var dbUri = process.env['DB_URI_' + envString] var dbUser = process.env['DB_USER_' + envString] var dbPassword = process.env['DB_PASSWORD_' + envString]


希望有幫助!

就我個人而言,我喜歡為不同的環境使用相同的環境變量名稱,因此我創建了一個env.ts來包含我要加載 dotEnv 的位置,這樣我就可以在整個應用程序中使用相同的環境變量名稱。

import * as process from "process";
import * as dotenv from 'dotenv'
import * as path from "path";

const getDotEnvPath = (env?: string) => {
    if (env == 'TEST') {
        return '.env.test'
    }
    return '.env'
}
dotenv.config({path: path.resolve(process.cwd(), getDotEnvPath(process.env.NODE_ENV?.toUpperCase()))})

還需要注意的是,默認情況下 dotEnv 僅在尚未設置環境變量時設置它們。

暫無
暫無

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

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