首頁 > web前端 > js教程 > 主體

在 NodeJS 中使用 Joi 驗證環境變量

WBOY
發布: 2024-07-26 11:46:30
原創
507 人瀏覽過

想像一下您正處於一個專案的最後階段,一切都準備就緒,然後繁榮起來!由於環境變數遺失或配置錯誤,應用程式崩潰。聽起來很熟悉嗎?如果你去過那裡,你就會知道那種挫折感。但不要害怕,因為 Joi 來拯救世界!

Image description

在這篇文章中,我們將探討如何使用 Joi 來驗證環境變數並設定預設值,確保您的應用程式在所有環境中順利運作。

問題

環境變數就像是我們應用程式的無名英雄。它們掌握著敏感資訊、資料庫連接和各種配置設定的密鑰。但能力越大,責任越大:

  • 缺少變數:「為什麼我的應用程式沒有連接到資料庫?」糟糕,忘記設定 DATABASE_URL。
  • 不正確的資料類型: 「為什麼我的伺服器正在監聽連接埠『三千』?」PORT 變數中的拼字錯誤。
  • 配置不一致:開發工作正常,但生產卻是一場惡夢。
  • 缺乏預設值:如果未設定某些變量,應用程式將失敗。

這些問題可能會導致不眠之夜和瘋狂的調試過程。但如果你可以完全避免它們呢?

輸入喬伊

Joi 是一個強大的 JavaScript 模式描述和資料驗證函式庫。使用 Joi,您可以為環境變數定義架構,確保它們滿足特定標準並在必要時設定預設值。

使用 Joi 驗證和設定預設值的步驟

1。安裝 Joi 和 dotenv
首先,您需要安裝Joi。開啟終端機並運作:

npm install joi dotenv
# dotenv if you are reading env variables from .env file
登入後複製

2。建立設定檔
建立一個名為 config.js 的檔案。我們將在這裡定義架構並驗證環境變數。

const Joi = require('joi');
const dotenv = require('dotenv');

// Load environment variables from .env file
dotenv.config();

// Define the schema
const envSchema = Joi.object({
  NODE_ENV: Joi.string().valid('development', 'production', 'test')
    .default('development'),
  PORT: Joi.number().default(3000),
  DATABASE_URL: Joi.string().uri().required(),
  API_KEY: Joi.string().required(),
  // Add more variables as needed
}).unknown(); // Allow unknown keys

// Validate the environment variables
const { error, value: envVars } = envSchema.validate(process.env, 
  { abortEarly: false }
);

if (error) {
  console.error('Config validation error(s):');
  error.details.forEach(detail => {
    console.error(`- ${detail.message}`);
  });
  throw new Error('Environment variables validation failed.');
}

// Export the validated and normalized environment variables
module.exports = {
  nodeEnv: envVars.NODE_ENV,
  port: envVars.PORT,
  databaseUrl: envVars.DATABASE_URL,
  apiKey: envVars.API_KEY,
  // Add more variables as needed
};
登入後複製

3。在您的應用程式中使用設定

const config = require('./config');

console.log(`Server is running on port ${config.port}`);
// Use config.databaseUrl, config.apiKey, etc.
登入後複製

有錯誤的範例
假設我們有以下 .env 檔:

NODE_ENV=development
PORT=not_a_number
DATABASE_URL=
API_KEY=my_api_key
登入後複製

當我們執行應用程式時,Joi 將驗證這些變數。發生的情況是這樣的:

  1. PORT 設定為 not_a_number,這不是有效的號碼。
  2. DATABASE_URL 為空,這是無效的,因為它是必填欄位。

當 Joi 驗證這些變數時,它會拋出錯誤。

jaimin:~/joi-validate-env$ node index.js
Config validation error(s):
- "PORT" must be a number
- "DATABASE_URL" is not allowed to be empty
/home/jaimin/joi-validate-env/config.js:27
  throw new Error('Environment variables validation failed.');
  ^

Error: Environment variables validation failed.
    at Object.<anonymous> (/home/jaimin/joi-validate-env/config.js:27:9)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (/home/jaimin/joi-validate-env/index.js:1:16)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
登入後複製

這份詳細的錯誤報告有助於快速識別並修復環境配置中的問題。

為什麼要使用 Joi?

1。一致性
不再有「在我的機器上運行」的時刻。 Joi 確保設定所有必要的環境變數並在不同環境中具有正確的類型。

2。預設值
為變數設定預設值,降低因缺少設定而導致執行時間錯誤的風險。

3。早期錯誤偵測
在啟動階段儘早捕獲配置錯誤,防止應用程式以無效設定運行。

4。架構文件
充當環境變數的自記錄模式,使新開發人員更容易理解所需的配置。

5。靈活性
允許複雜的驗證邏輯,例如值範圍、特定格式和自訂驗證函數。

結論

使用 Joi 驗證環境變數並設定預設值就像為您的應用程式建立了安全網。它確保您的應用程式在所有環境中順利運行,避免意外崩潰和數小時的調試。

透過採用這種方法,您可以避免與環境變數相關的常見陷阱,並專注於建立為使用者增加價值的功能。因此,繼續吧,將 Joi 整合到您的專案中,然後您就可以安然入睡了,因為您知道您的環境變數都在良好的掌握之中。

編碼愉快!

以上是在 NodeJS 中使用 Joi 驗證環境變量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板