ミドルウェア
ミドルウェア
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が内部的に着信req
とres
のNodeインスタンスをリクエストとレスポンスオブジェクトでラップしますが、これはミドルウェアフェーズの後に行われるためです。ミドルウェアを作成する必要がある場合は、Nodeのreq
とres
インスタンスを使用する必要があります。それ以外の場合は、リクエストとレスポンスの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/helmet
、cors
の場合は@fastify/cors
、serve-static
の場合は@fastify/static
などです。