どこに配置すればいいですか? -ノード内の簡単なガイド。JS

ジャック-イェー

フォローしている

2020年2月1日•6分読み取り

このコーディングパターンに従うことで、コードリポジトリの品質を向上させます!

tl;dr:コードレポをhttps://github.com/teamzerolabs/config-service-referenceでチェックしてください。

おそらくはい。 プログラムがリモートエンドポイントに接続または呼び出しを行っている限り、どこかからセキュリティ資格情報を取得する必要があります。

これらの資格情報をプログラムにロードするには、さまざまな方法があります:

これはGitHub starterプロジェクトでは一般的ですが、これを教育して減らすことができることを願っています。

レベル1:テキストファイル自体にハードコードします—これは通常、金曜日に、または始めたばかりの人のために起こります。 参照レポは、これを行う代わりに使用するコードを取得できるようにするのに役立ちます。

レベル2:プロセスからロードします。接続が発生する場所のenvオブジェクト—これはハードコーディングよりも優れていますが、時間の経過とともに環境変数を追跡するのが少し難しくなり 参照されるすべての環境変数を見つけるために単一のファイルに移動することはできないためです。

レベル3:単一のファイルからすべての環境設定をロードします—これはこの記事とコード例で提供されています! これにより、構成を検索する場所を知ることができ、悪い値が指定された場合にプログラムが早期に失敗することができます。

レベル4:設定スクリプトをサービスに変換する—そうすることで、他の初期化コードが実行される前に、ロードされた値をタイプチェックしたり、S3やデータベースから追加の設定をロードしたりするなど、他の興味深いことを行うことができます。

  • を開始する前にノードを持っています。JSランタイムレディ(バージョン> 10)
  • または、ブラウザまたはcurlを使用してApiをヒットすることもできます。
  • ローカルスペースにhttps://github.com/teamzerolabs/config-service-referenceをチェックしてください。MySQLを起動して実行しています:docker-composeファイルをdb-setupフォルダーに含めました。

簡単な例—MySQLデータベースに格納されている書籍を返す最小ブックサービス

3 良い本!

最初のフォルダnode-starthereには、二つのファイルがあります:

  • メイン。js-これは、localhost:3000/books
  • models/indexでリクエストを処理するためにexpressサーバーを設定する場所です。js-mysql2sequelizeでMySQLに接続します。
  • 開始するにはyarn startを実行します。

データベースの資格情報が現在どのように格納されているかを確認できますmodels/index.js :

ここではハードコードされていますが、より良いことができます。

ハードコーディングデータベースの資格情報の欠点

  • それは安全ではありません—公開リポジトリをチェックアウトする人は、特にデータベースインスタンスが公開されている場合、公開されていることをあまり知らないようになりました。
  • 異なる環境で作業することは困難です—このコードをテストまたは実稼働環境に接続する必要がある場合、デプロイメントのためだけにコード変更を行

ステップ#1—環境変数からこれらのそれぞれをロードします

あなたはここで環境変数についての詳細を読むことができます。 その要点は、このような実行中のプログラムに値を渡すことができるということです

構成の数が少ない場合、このアプローチは問題ありませんが、使用の最初の月に生き残ったプロジェクトは、より多くのサービスと統合され始めることを知っているように、このアプローチは問題ありません。 (私の最近の4月のプロジェクトは40の変数を持っています! 上記のyarn start文のためにそれらを入力すると想像してみてください、それは多すぎます)。

ステップ#2—使用前にローカル開発の実行時に環境変数をロードします。

幸いなことに、変数を何度も入力することから私たちを救うパッケージがあります。 それはdotenvと呼ばれています。 あなたはdotenvを次のように使います:

コードをsrcの下に置き、configフォルダを作成し、そこに.envファイルを作成します:

DATABASE_URL=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=dIKnUfyfUPURi9irSplTOqGO4OtE0
DATABASE_NAME=configexample

そして、dotenv.configはテキストファイルの変数をprocess.envにロードします。yarn startで変数を入力するのをスキップできます!

ステップ#3—値を解析し、欠落している場合に早期に終了する便利なメソッド

誤った設定されたプログラムよりも危険なのは、数ヶ月間実行されている誤った設定されたプログラムだけです。

.envファイルを作成するのを忘れたり、悪い値を入れたりした場合は、できるだけ早く知りたいのが理想的です。 不完全または間違った構成でコードを実行すると、トラブルシューティングが困難になります。

2番目のフォルダーnode-with-config-serviceを見ると、次のユーティリティメソッドが追加され、変数を解析するために使用されていることがわかります。

データベース接続セク:

環境変数がない場合、プログラムはエラーで早期に終了し、プログラム内の任意の場所から存在する静的な設定オブジェクトに依存できます!

このアプローチにはさらに二つの拡張があります—TypeScriptで同じパターンを適用し、NestJSで実際のヘルパーサービスを設定することで一歩先を行くことができます。 両方ともgit repoに含まれています。 これらについては、将来のTypeScript+NestJsの記事で説明します。