本文へ移動

Request ID ミドルウェア ​

Request ID ミドルウェアは、ハンドラーで利用できる一意の ID を各リクエストに生成します。

情報

Node.js:このミドルウェアは crypto.randomUUID() で ID を生成します。グローバルの crypto は Node.js 20 以降で導入されたため、それより前のバージョンではエラーが発生する場合があります。その場合は generator を指定してください。ただし、Node.js アダプターを使っている場合は、グローバルに crypto を自動設定するため不要です。

インポート ​

ts
import { Hono } from 'hono'
import { requestId } from 'hono/request-id'

使い方 ​

Request ID ミドルウェアを適用したハンドラーとミドルウェアでは、requestId 変数でリクエスト ID にアクセスできます。

ts
const app = new Hono()

app.use('*', requestId())

app.get('/', (c) => {
  return c.text(`Your request id is ${c.get('requestId')}`)
})

型を明示するには、RequestIdVariables をインポートし、new Hono() のジェネリクスに渡します。

ts
import type { RequestIdVariables } from 'hono/request-id'

const app = new Hono<{
  Variables: RequestIdVariables
}>()

リクエスト ID の設定 ​

ヘッダー(デフォルトは X-Request-Id)にカスタムのリクエスト ID を設定すると、新しく生成せず、その値を使用します。

ts
const app = new Hono()

app.use('*', requestId())

app.get('/', (c) => {
  return c.text(`${c.get('requestId')}`)
})

const res = await app.request('/', {
  headers: {
    'X-Request-Id': 'your-custom-id',
  },
})
console.log(await res.text()) // your-custom-id

この機能を無効にするには、headerName オプションを空文字列にします。

オプション ​

optional limitLength: number ​

リクエスト ID の最大長。デフォルトは 255 です。

optional headerName: string ​

リクエスト ID に使うヘッダー名。デフォルトは X-Request-Id です。

optional generator: (c: Context) => string ​

リクエスト ID を生成する関数。デフォルトでは crypto.randomUUID() を使います。

プラットフォーム固有のリクエスト ID ​

AWS Lambda などの一部のプラットフォームは、すでに各リクエストに独自の ID を生成します。 追加の設定がなければ、このミドルウェアはそれらの ID を認識せず、 新しいリクエスト ID を生成します。アプリケーションのログを確認する際に、混乱の原因になります。

ID を統一するには、generator 関数でプラットフォーム固有のリクエスト ID を取得し、このミドルウェアで使用します。

MIT ライセンスで公開されています。