序章

morgan は、HTTPリクエストとエラーをログに記録するNode.jsおよびExpressミドルウェアであり、プロセスを簡素化します。 Node.jsとExpressでは、ミドルウェアはrequestresponseのライフサイクルメソッド、およびnext()メソッドにアクセスしてExpressサーバーのロジックを継続する関数です。

この記事では、Expressプロジェクトにモーガンを実装する方法について説明します。

前提条件

この記事をフォローするには、次のものが必要です。

ステップ1-プロジェクトの設定

Express.jsはNode.jsフレームワークであるため、先に進む前に、Node.jsの最新バージョンのNode.jsを使用していることを確認してください。

Expressプロジェクトにモーガンを含めるには、依存関係としてモーガンをインストールする必要があります。

プロジェクト用にexpress-morganという名前の新しいディレクトリを作成します。

  1. mkdir express-morgan

新しいディレクトリに移動します。

  1. cd express-morgan

デフォルトで新しいノードプロジェクトを初期化します。 これには、依存関係にアクセスするためのpackage.jsonファイルが含まれます。

  1. npm init -y

依存関係としてmorganをインストールします。

  1. npm install morgan --save

エントリファイルindex.jsを作成します。 ここで、Expressサーバーのロジックを処理します。

  1. touch index.js

プロジェクトにモーガンを追加したので、それをExpressサーバーに含めましょう。 index.jsファイルで、Expressインスタンスをインスタンス化し、morganを要求します。

index.js
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()を渡します。

index.js
const app = express();

app.use(morgan('tiny'));

プリセットtinymorgan()の引数として含めると、組み込みのメソッドが使用され、URLが識別され、ステータスが宣言され、リクエストの応答時間がミリ秒単位で示されます。

または、morganは、tinyなどのプリセットを以下に定義されたフォーマット文字列で読み取ります。

morgan(':method :url :status :res[content-length] - :response-time ms');

これは、モーガンが解析する形式のtinyプリセットに含まれているのと同じ機能になる傾向があります。 :シンボルの後には、トークンと呼ばれるモーガン関数があります。 フォーマット文字列を使用してトークンを定義し、独自のカスタムモーガンミドルウェアを作成できます。

ステップ3–独自のトークンを作成する

モーガンのトークンは、:記号の後に識別される関数です。 morganを使用すると、.token()メソッドを使用して独自のトークンを作成できます。

.token()メソッドは、コールバック関数に続く最初の引数として、型またはトークンの名前を受け入れます。 morganは、トークンを使用してログが発生するたびにコールバック関数を実行します。 ミドルウェアとして、モーガンはreqおよびresオブジェクトを引数として適用します。

index.jsファイルで、.token()メソッドを使用し、無名関数に続く最初の引数として型を渡します。

index.js
morgan.token('host', function(req, res) {
    return req.hostname;
});

匿名コールバック関数は、ExpressサーバーのHTTPリクエストで使用する新しいトークンとしてreqオブジェクトのhostnameを返します。

ステップ4–カスタム引数を使用したトークンの設計

カスタム引数を示すために、角かっこを使用してトークンに渡される引数を定義できます。 これにより、トークンは追加の引数を受け入れることができます。 index.jsファイルで、:paramトークンのモーガンフォーマット文字列にカスタム引数を適用します。

index.js
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のドキュメントをご覧ください。