本文へスキップ
バージョン: 最新版 (v5.0.x)

ミドルウェア

ミドルウェア

Fastify v3.0.0以降、ミドルウェアは標準ではサポートされておらず、@fastify/express@fastify/middieなどの外部プラグインが必要です。

Expressミドルウェアをuseするために@fastify/expressプラグインを登録する例

await fastify.register(require('@fastify/express'))
fastify.use(require('cors')())
fastify.use(require('dns-prefetch-control')())
fastify.use(require('frameguard')())
fastify.use(require('hsts')())
fastify.use(require('ienoopen')())
fastify.use(require('x-xss-protection')())

シンプルなExpressスタイルのミドルウェアを、パフォーマンスを向上させてサポートする@fastify/middieを使用することもできます。

await fastify.register(require('@fastify/middie'))
fastify.use(require('cors')())

ミドルウェアはカプセル化できることを覚えておいてください。つまり、プラグインガイドで説明されているように、registerを使用してミドルウェアの実行場所を決定できます。

Fastifyのミドルウェアは、sendメソッドやFastifyのレスポンスインスタンス固有の他のメソッドを公開しません。これは、Fastifyが内部的に着信reqresのNodeインスタンスをリクエストレスポンスオブジェクトでラップしますが、これはミドルウェアフェーズの後に行われるためです。ミドルウェアを作成する必要がある場合は、Nodeのreqresインスタンスを使用する必要があります。それ以外の場合は、リクエストレスポンスのFastifyインスタンスを既に持っているpreHandlerフックを使用できます。詳細については、フックを参照してください。

特定のパスへのミドルウェア実行の制限

特定のパスでのみミドルウェアを実行する必要がある場合は、パスをuseの最初の引数として渡すだけで済みます!

これはパラメータ付きのルート(例:/user/:id/comments)をサポートしておらず、複数のパスでワイルドカードはサポートされていません。

const path = require('node:path')
const serveStatic = require('serve-static')

// Single path
fastify.use('/css', serveStatic(path.join(__dirname, '/assets')))

// Wildcard path
fastify.use('/css/(.*)', serveStatic(path.join(__dirname, '/assets')))

// Multiple paths
fastify.use(['/css', '/js'], serveStatic(path.join(__dirname, '/assets')))

代替手段

Fastifyは、最も一般的に使用されるミドルウェアのいくつかの代替手段を提供しています。たとえば、helmetの場合は@fastify/helmetcorsの場合は@fastify/corsserve-staticの場合は@fastify/staticなどです。