現代軟體需要靈活性、可擴充性和強大的安全性。 環境變數在實現這種平衡方面發揮著至關重要的作用。本指南探討了在 Node.js 應用程式中設定和管理環境變數的各種方法,強調安全性和可維護性的最佳實踐。 我們將涵蓋從啟動驗證到防止敏感資料外洩的所有內容。 無論您是經驗豐富的開發人員還是 Node.js 新手,這些資訊對於建立安全、適應性強的應用程式都是至關重要的。
環境變數是儲存在應用程式程式碼庫外部的鍵值對,通常位於設定檔或系統設定中。 它們保存 API 金鑰和資料庫憑證等敏感數據,防止硬編碼並提高安全性。 這種方法簡化了不同環境(開發、測試、生產)的管理。
在 Node.js 中,環境變數無需修改程式碼即可實現動態應用程式配置。相同的程式碼庫可以根據環境與不同的資料庫或API交互,增強安全性,簡化部署,提高適應性。
與標準 JavaScript 變數不同,環境變數不在程式碼中定義。它們透過 process.env
存取並獨立存在,可能影響系統上的多個應用程式。
Node.js 使用 process.env
物件來存取和管理環境變數。 若要檢索變數的值,請使用 process.env.VARIABLE_NAME
。例如,process.env.API_KEY
檢索與 API_KEY
關聯的值。 雖然技術上可以在程式碼中設定環境變量,但通常不鼓勵這樣做;它首先否定了使用環境變量的好處。
以下是 API_KEY
在 Express API 中的使用方式:
<code class="language-javascript">const express = require('express'); const app = express(); // Access API key from environment variables const apiKey = process.env.API_KEY; if (!apiKey) { console.error('Error: API key is not defined.'); process.exit(1); } app.get('/', (req, res) => { res.send('API key successfully loaded.'); }); // Start the server const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });</code>
現在,讓我們來探索設定環境變數的不同方法:
dotenv
: dotenv
套件透過將環境變數與程式碼分開來簡化管理。 在 .env
檔案中定義鍵值對:<code>PORT=3000 DB_USERNAME=dbuser</code>
像這樣導入並使用它:
<code class="language-javascript">import * as dotenv from 'dotenv'; dotenv.config(); console.log(process.env.PORT); // Output: 3000 console.log(process.env.DB_USERNAME); // Output: dbuser</code>
您可以使用 .env
指定備用 dotenv.config({ path: './path/to/another.env' })
檔案路徑。 雖然對開發有用,但請考慮其他生產方法。
~/.bashrc
、~/.zshrc
)。 這會影響該 shell 會話中的所有進程。 例如:<code class="language-javascript">const express = require('express'); const app = express(); // Access API key from environment variables const apiKey = process.env.API_KEY; if (!apiKey) { console.error('Error: API key is not defined.'); process.exit(1); } app.get('/', (req, res) => { res.send('API key successfully loaded.'); }); // Start the server const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });</code>
重新啟動終端或執行 source ~/.bashrc
以套用變更。 對於系統範圍的存取(系統進程),請使用 /etc/environment
.
launch.sh
):<code>PORT=3000 DB_USERNAME=dbuser</code>
使其可執行(chmod x launch.sh
)並運行它(./launch.sh
)。
<code class="language-javascript">import * as dotenv from 'dotenv'; dotenv.config(); console.log(process.env.PORT); // Output: 3000 console.log(process.env.DB_USERNAME); // Output: dbuser</code>
或使用 ecosystem.config.js
檔案進行特定於環境的配置。
Dockerfile
:ENV
設定 <code class="language-bash"># ~/.bashrc export PORT=3000 export DB_USERNAME=myuser</code>
使用 -e PORT=5173
或在 docker-compose.yml
檔案中執行容器時覆寫預設值。
遵循以下最佳實踐來實現安全且可維護的應用程式:
描述性名稱和文件:使用清晰的描述性名稱並在專案的自述文件中記錄其用途。
啟動驗證:在應用程式啟動時驗證環境變數以確保它們設定正確。 優雅地處理缺少的變數(預設值或錯誤處理)。
.env
檔案排除: 使用 .env
從版本控制 (Git) 排除 .gitignore
檔案。
考慮使用 KMS(金鑰管理系統):為了增強安全性,特別是對於高度敏感的數據,請使用 KMS 來加密和儲存您的環境變數。
預設值:為非關鍵環境變數提供預設值,以確保應用程式功能,即使變數遺失也是如此。
切勿在前端暴露:切勿將敏感環境變數直接暴露給客戶端程式碼。
Clerk SDK 利用環境變數在 Clerk 儀表板中進行設定和應用程式關聯。 這可以使用 Express 實現安全的後端請求和前端驗證。 例如:
<code class="language-bash">#!/bin/bash export PORT=3000 export DB_USERNAME=myuser node app.js</code>
安全管理環境變數至關重要。 透過遵循這些最佳實踐,您將顯著增強 Node.js 應用程式的安全性和可維護性,確保它們為生產部署做好準備。
以上是如何在 Node.js 中設定環境變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!