Nest.js 環境変数の設定とシリアル化の詳細な説明

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明

プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環境、テスト環境、開発環境では、リンク アドレス、リンク ポート番号、ログイン ユーザー名、パスワード関連情報など、異なるデータベース情報が必要です。この問題を解決するには、関連する操作を実行する必要があります。

Nest での最適なアプローチは、環境固有の .env ファイルをロードする ConfigService を公開する ConfigModule を作成することです。 Nest はすぐに使える @nestjs/config を提供します。

構成

npm エコシステムには、最も単純なものを含め、関連する依存関係パッケージが多数あります。

糸を追加 dotenv-flow
糸を追加 @types/dotenv-flow -D

インストール後、main.ts で直接使用します。

'dotenv-flow' から dotenv として * をインポートします

/**
 * .env 環境をインポート * https://www.npmjs.com/package/dotenv-flow
 */
config() は、

対応する環境 .env 変数を使用することもできますが、公式に推奨されているパッケージ @nestjs/config を使用してください。

糸を追加 @nestjs/config

app.module.ts の forRoot 静的メソッドで環境変数 .env 解析を構成します。

'@nestjs/common' から { モジュール } をインポートします。
'@nestjs/config' から ConfigModule をインポートします。

@モジュール({
 インポート: [ConfigModule.forRoot()]
})
クラス AppModule をエクスポートします {}

次に、プロジェクトのルート ディレクトリに新しい .env ファイルを作成します。

データベースユーザー=
データベースパスワード=
データベース名=
データベースポート=
データベースホスト=

カスタム環境パス

.env を本番環境、テスト環境、開発環境に合わせて調整する必要がある場合は、次のように構成できます。

ConfigModule.forRoot({
 envFilePath: ['.env.development.local', '.env.development'],
})

先にソートされたものが最も優先度が高いですが、起動コマンドで環境変数を設定すると、最も優先度が高くなります。次に例を示します。

エクスポート DATABASE_USER=root && nest start

カスタム構成ファイル

複雑なプロジェクトの場合は、新しい src/config/configuration.ts を作成するなど、使用される構成可能な変数を収集する必要があります。

エクスポートデフォルト()=>({
 ポート: parseInt(process.env.PORT, 10) || 3000,
 データベース: {
  ホスト: process.env.DATABASE_HOST || 'localhost',
  ポート: parseInt(process.env.DATABASE_PORT, 10) || 3306
 }
})

次に、ConfigModule.forRoot にロードします。

'./config/configuration' から設定をインポートします

@モジュール({
 輸入: [
  ConfigModule.forRoot({
   ロード: [構成]
  })
 ]
})
クラス AppModule をエクスポートします {}

設定変数の読み取り

関連する構成変数を読み取る必要がある場合は、ConfigService を使用し、使用する *.module.ts ファイルに導入する必要があります。

@モジュール({
 インポート: [ConfigModule],
 // ...
})

関係する場所が多い場合、各モジュールをインポートするのは面倒です。上記の app.module.ts で行うことができます。

フィールドを追加します:

'./config/configuration' から設定をインポートします

@モジュール({
 輸入: [
  ConfigModule.forRoot({
   isGlobal: true、
   ロード: [構成]
  })
 ]
})
クラス AppModule をエクスポートします {}

次に、それをコンストラクターに挿入します。

'@nestjs/config' から ConfigService をインポートします。

コンストラクター(プライベートconfigService: ConfigService) {}

次のような構成変数を取得します。

const dbUser = this.configService.get<文字列>('DATABASE_USER')
const dbHost = this.configService.get<文字列>('database.host')

シリアル化

シリアル化とは、プログラムがネットワーク応答でオブジェクトを返して送信する前のプロセスを指します。提供された情報は、クライアントに送信する前に変換およびクリーンアップする必要があります。たとえば、ユーザーを照会する場合、現在のユーザー エンティティ情報は通常返されますが、その中のパスワード情報はクライアントに送信できないため、ここで何らかの変換を行う必要があります。

幸いなことに、Nest は class-transformer と呼ばれる非常に便利なパッケージを提供しています。

yarn クラストランスフォーマーを追加

たとえば、次のユーザー エンティティ情報ではパスワード情報は除外されます。

'class-transformer' から { 除外 } をインポートします

エクスポートクラスUserEntity {
 id: 番号
 firstName: 文字列;
 lastName: 文字列;

 @除外()
 パスワード: 文字列;

 コンストラクター(部分: Partial<UserEntity>) {
  オブジェクトに部分的な代入を行う。
 }
}

次に、コントローラーでクエリ ユーザー メソッドを処理します。

@UseInterceptors(クラスシリアライザーインターセプター)
@Get(':id')
findOne(@Param('id') id: 文字列): Promise<UserEntity> {
 this.userService.findOne(id) を返します。
}

最後のクエリではパスワードの表示が省略されます。

要約する

Nest.js 環境変数の設定とシリアル化に関するこの記事はこれで終わりです。Nest.js 環境変数の設定に関するその他の関連コンテンツについては、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  MySQL における Decimal 型と Float Double 型の違い (詳細説明)

>>:  CentOS7にNginxをインストールして自動起動を設定する方法

推薦する

仮想マシンUbuntu 16.04がインターネットに接続できない問題の解決策

Ubuntu をインストールしたばかりですが、開いたときにネットワーク接続がありませんでした。右上隅...

Linux のリンク解除機能とファイルの削除方法

1. リンク解除機能ハード リンクの場合、unlink はディレクトリ エントリを削除し、inode...

MySQL explain クエリ命令情報の取得原理と例

explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...

VMware 仮想マシンでの Centos8 ブリッジの静的 IP 設定方法

1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...

時間を節約できる Linux コマンド エイリアス 15 個

序文Linux システムの管理と保守のプロセスでは、多数のコマンドが使用されます。非常に長いコマンド...

Robots.txtの詳細な紹介

Robots.txt はプレーンテキスト ファイルであり、Web サイト管理者は、ロボットによるアク...

Linux 圧縮ファイルコマンド zip の使用例

「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...

カルーセル効果を実現するネイティブJavaScript

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

VirtualBox での CentOS 8.1 仮想マシンのインストールを最小限に抑える詳細なチュートリアル

1. 関連ツールと画像をダウンロードするダウンロードリンクバーチャルボックス: https://do...

JavaScriptのクローン作成についての簡単な説明

目次1. 浅いクローニング2. ディープクローニング1. 浅いクローニング浅いクローンでは配列やオブ...

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

スプレッド演算子のサンプルコードと JavaScript での応用

スプレッド演算子を使用すると、式をある時点で展開できます。スプレッド演算子は、複数のパラメーター (...

Windows 10 での MySQL 5.7.21 インストーラのインストール グラフィック チュートリアル

MySQLをインストールしてメモしておきます。うまくインストールできるか分かりませんが、試してみます...

Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...

xshellを使用してLinuxサーバーに接続する

xshellを使用してLinuxに接続する利点Windows環境でLinuxを直接操作できるインター...