Request ID ミドルウェア
Request ID ミドルウェアは、ハンドラーで利用できる一意の ID を各リクエストに生成します。
情報
Node.js:このミドルウェアは crypto.randomUUID() で ID を生成します。グローバルの crypto は Node.js 20 以降で導入されたため、それより前のバージョンではエラーが発生する場合があります。その場合は generator を指定してください。ただし、Node.js アダプターを使っている場合は、グローバルに crypto を自動設定するため不要です。
インポート
import { Hono } from 'hono'
import { requestId } from 'hono/request-id'使い方
Request ID ミドルウェアを適用したハンドラーとミドルウェアでは、requestId 変数でリクエスト ID にアクセスできます。
const app = new Hono()
app.use('*', requestId())
app.get('/', (c) => {
return c.text(`Your request id is ${c.get('requestId')}`)
})型を明示するには、RequestIdVariables をインポートし、new Hono() のジェネリクスに渡します。
import type { RequestIdVariables } from 'hono/request-id'
const app = new Hono<{
Variables: RequestIdVariables
}>()リクエスト ID の設定
ヘッダー(デフォルトは X-Request-Id)にカスタムのリクエスト ID を設定すると、新しく生成せず、その値を使用します。
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 を取得し、このミドルウェアで使用します。
各プラットフォームの関連リンク
- AWS Lambda
- Cloudflare
- Deno
- Fastly