ホームページ > ウェブフロントエンド > jsチュートリアル > NodeJS の Joi を使用して環境変数を検証する

NodeJS の Joi を使用して環境変数を検証する

WBOY
リリース: 2024-07-26 11:46:30
オリジナル
508 人が閲覧しました

あなたがプロジェクトの最終段階にいて、すべての準備が整っており、順調に稼働していると想像してください。環境変数が見つからないか構成が間違っているため、アプリがクラッシュします。おなじみですね?そこに行ったことがある人なら、そのイライラを知っているでしょう。でも心配しないでください。Joi が危機を救うためにここにいます!

Image description

このブログ投稿では、Joi を使用して環境変数を検証し、デフォルト値を設定し、アプリケーションがすべての環境でスムーズに動作するようにする方法を検討します。

問題

環境変数は、アプリケーションの縁の下の力持ちのようなものです。これらは、機密情報、データベース接続、およびさまざまな構成設定の鍵を保持しています。しかし、大きな力には大きな責任が伴います:

  • 変数が欠落しています: 「なぜ私のアプリはデータベースに接続できないのですか?」おっと、DATABASE_URL を設定するのを忘れていました。
  • 間違ったデータ型: 「なぜ私のサーバーはポート '3000' をリッスンしているのですか?」 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート