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をインストールして自動起動を設定する方法

推薦する

JavaScript 上級プログラミング: 変数とスコープ

目次1. 元の値と参照値2. インスタンス3. 範囲1. 元の値と参照値6 つの単純なデータ型の値は...

JavaScript ベースのシンプルなカルーセルの実装

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

js の一般的でない演算子と演算子の概要

一般的な演算子と JavaScript の演算子の概要カテゴリオペレーター算術演算子+、–、*、/、...

Linux でスワップ領域を確認する 5 つのコマンドの概要

序文Linux では、スワップ パーティションとスワップ ファイルの 2 種類のスワップ領域を作成で...

よく使われる HTML 形式のタグ_Powernode Java Academy

1. タイトルHTML では、<h1></h1> から <h6>...

DockerはMysql、.Net6、Sqlserverなどのコンテナをデプロイします

目次CentOS 8にDockerをインストールする1. yumを更新する2. containerd...

モバイルデバイスで 1 ピクセルの境界線の問題を解決するいくつかの方法 (5 つの方法)

この記事では、モバイルデバイス上の 1 ピクセルの境界線の問題を解決する 5 つの方法を紹介します。...

CSS プロパティ display:flow-root 宣言を 1 つの記事でマスターする

zhangxinxu より https://www.zhangxinxu.com/wordpress...

MySQLの共同クエリ最適化メカニズムの詳細な説明

目次MySQL フェデレーテッド クエリ実行戦略。実行計画フェデレーテッドクエリオプティマイザーMy...

MySQL5.7 マスタースレーブ構成例の分析

MySQL5.7マスタースレーブ構成の実装方法、具体的な内容は次のとおりですインストール環境:マスタ...

MySQL の異なるテーブル間でフィールドをコピーする

場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...

Tomcat のインストール後に起こりうる問題の紹介

1. Tomcatサービスが開いていませんブラウザのアドレスバーにlocalhost:8080と入力...

Node-Redを使用してMySQLデータベースに接続する方法

Node-red をデータベース (mysql) に接続するには、まずコンピューターに MySQL ...

MySQLデータベースの基本構文と操作

MySQLデータベースの基本構文DDL操作データベース作成構文: create database デ...

JS での Reduce() メソッドの使用の概要

目次1. 文法2. 例3. その他の関連方法長い間、reduce() メソッドの具体的な使い方を理解...