Expressプロジェクトでモーガンを使用する方法
序章
morgan は、HTTPリクエストとエラーをログに記録するNode.jsおよびExpressミドルウェアであり、プロセスを簡素化します。 Node.jsとExpressでは、ミドルウェアはrequest
とresponse
のライフサイクルメソッド、およびnext()
メソッドにアクセスしてExpressサーバーのロジックを継続する関数です。
この記事では、Expressプロジェクトにモーガンを実装する方法について説明します。
前提条件
この記事をフォローするには、次のものが必要です。
- Node.jsの一般的な理解が推奨されますが、必須ではありません。 Node.jsの詳細については、Node.jsシリーズのコーディング方法をご覧ください。
- Node.jsはローカルにインストールされます。これは、Node.jsのインストール方法とローカル開発環境の作成に従って実行できます。
ステップ1-プロジェクトの設定
Express.jsはNode.jsフレームワークであるため、先に進む前に、Node.jsの最新バージョンのNode.jsを使用していることを確認してください。
Expressプロジェクトにモーガンを含めるには、依存関係としてモーガンをインストールする必要があります。
プロジェクト用にexpress-morgan
という名前の新しいディレクトリを作成します。
- mkdir express-morgan
新しいディレクトリに移動します。
- cd express-morgan
デフォルトで新しいノードプロジェクトを初期化します。 これには、依存関係にアクセスするためのpackage.json
ファイルが含まれます。
- npm init -y
依存関係としてmorganをインストールします。
- npm install morgan --save
エントリファイルindex.js
を作成します。 ここで、Expressサーバーのロジックを処理します。
- touch index.js
プロジェクトにモーガンを追加したので、それをExpressサーバーに含めましょう。 index.js
ファイルで、Expressインスタンスをインスタンス化し、morgan
を要求します。
const express = require('express');
const morgan = require('morgan');
const app = express();
app.listen(3000, () => {
console.debug('App listening on :3000');
});
Expressサーバーがセットアップされたので、morganを使用してリクエストログを追加する方法を見てみましょう。
ステップ2–Expressでモーガンを使用する
Expressサーバーでmorganを使用するには、インスタンスを呼び出して、HTTPリクエストの前に.use()
ミドルウェアで引数として渡すことができます。 morganには、組み込みのフォーマットとオプションを備えた新しいロガーミドルウェアを作成するための一連のプリセットまたは事前定義されたフォーマット文字列が付属しています。 プリセットtiny
は、HTTPリクエストをログに記録するときに最小限の出力を提供します。
index.js
ファイルで、app.use()
Expressミドルウェアを呼び出し、引数としてmorgan()
を渡します。
const app = express();
app.use(morgan('tiny'));
プリセットtiny
をmorgan()
の引数として含めると、組み込みのメソッドが使用され、URLが識別され、ステータスが宣言され、リクエストの応答時間がミリ秒単位で示されます。
または、morganは、tiny
などのプリセットを以下に定義されたフォーマット文字列で読み取ります。
morgan(':method :url :status :res[content-length] - :response-time ms');
これは、モーガンが解析する形式のtiny
プリセットに含まれているのと同じ機能になる傾向があります。 :
シンボルの後には、トークンと呼ばれるモーガン関数があります。 フォーマット文字列を使用してトークンを定義し、独自のカスタムモーガンミドルウェアを作成できます。
ステップ3–独自のトークンを作成する
モーガンのトークンは、:
記号の後に識別される関数です。 morganを使用すると、.token()
メソッドを使用して独自のトークンを作成できます。
.token()
メソッドは、コールバック関数に続く最初の引数として、型またはトークンの名前を受け入れます。 morganは、トークンを使用してログが発生するたびにコールバック関数を実行します。 ミドルウェアとして、モーガンはreq
およびres
オブジェクトを引数として適用します。
index.js
ファイルで、.token()
メソッドを使用し、無名関数に続く最初の引数として型を渡します。
morgan.token('host', function(req, res) {
return req.hostname;
});
匿名コールバック関数は、ExpressサーバーのHTTPリクエストで使用する新しいトークンとしてreq
オブジェクトのhostname
を返します。
ステップ4–カスタム引数を使用したトークンの設計
カスタム引数を示すために、角かっこを使用してトークンに渡される引数を定義できます。 これにより、トークンは追加の引数を受け入れることができます。 index.js
ファイルで、:param
トークンのモーガンフォーマット文字列にカスタム引数を適用します。
app.use(morgan(':method :host :status :param[id] :res[content-length] - :response-time ms'));
morgan.token('param', function(req, res, param) {
return req.params[param];
});
モーガン呼び出しの:param
トークンのカスタム引数id
には、.token()
メソッドに続くパラメーターにIDが含まれます。
結論
morganは、HTTP要求をログに記録する際の柔軟性を可能にし、カスタム形式の文字列またはプリセットで正確なステータスと応答時間を更新します。 詳細については、morganのドキュメントをご覧ください。