Lang x Lang

middleware.js

middleware.js|ts ファイルは、Middleware を書き、request が完了する前に server 上で code を実行するために使用されます。次に、入ってくる request に基づいて、書き換え、Redirect、request や response headers の修正、または直接の応答によって response を変更することができます。

Middleware は routes がレンダリングされる前に実行されます。特に server-side でのカスタムロジック、例えば認証、ロギング、または redirects の処理などを実装するのに非常に役立ちます。

あなたのプロジェクトの root で、middleware.ts(または .js)ファイルを使用して Middleware を定義します。例えば、apppages と同じレベル、また適用可能な場合は src 内で。

middleware.ts
import { NextResponse, NextRequest } from 'next/server'

// This function can be marked `async` if using `await` inside
export function middleware(request: NextRequest) {
  return NextResponse.redirect(new URL('/home', request.url))
}

export const config = {
  matcher: '/about/:path*',
}
middleware.js
import { NextResponse } from 'next/server'

// This function can be marked `async` if using `await` inside
export function middleware(request) {
  return NextResponse.redirect(new URL('/home', request.url))
}

export const config = {
  matcher: '/about/:path*',
}

Exports

Middleware 関数

ファイルは、単一の関数を export する必要があります。これは、 default export または、middlewareという名前である必要があります。同じファイルから複数の middleware はサポートされていないことに注意してください。

middleware.js
// Example of default export
export default function middleware(request) {
  // Middleware logic
}

Config object (オプション)

オプションで、config object を Middleware 関数と一緒に export することができます。この object には、Middleware が適用される paths を指定するためのmatcherが含まれています。

Matcher

matcher オプションは、特定の paths を Middleware が実行する対象として指定することができます。これらの paths はいくつかの方法で指定することができます:

  • 単一の path について: 直接 string を使用して path を定義します。たとえば、'/about'のように。
  • 複数の paths について:複数の paths をリスト化するために配列を使用します。例えば、matcher: ['/about', '/contact']のように、Middleware を/about/contactの両方に適用します。

さらに、matcherは、matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)']のような正規表現を通じて複雑な path 仕様をサポートしており、どの paths を含めるか除外するかについて精密な制御を可能にします。

matcherオプションは、以下のキーを持つ Object の配列も受け入れます:

  • source:path または request paths に一致させるために使用されるパターンです。これは直接的な path 一致用の string であるか、より複雑な一致用のパターンであることができます。
  • regexp(オプション): source に基づいてマッチングを微調整する正規表現の string。これにより、含まれるまたは除外される paths をより詳細に制御できます。
  • locale(オプション):これがfalseに設定されていると、 path のマッチングにおいてロケールベースのルーティングを無視する boolean です。
  • has(オプション): 特定の request 要素(例えば headers, query パラメーター、または cookies)の存在に基づく条件を指定します。
  • missing(オプショナル):特定の request 要素が欠けている状況に焦点を当てます。例えば、 missing headers や cookies などです。
middleware.js
export const config = {
  matcher: [
    {
      source: '/api/*',
      regexp: '^/api/(.*)',
      locale: false,
      has: [
        { type: 'header', key: 'Authorization', value: 'Bearer Token' },
        { type: 'query', key: 'userId', value: '123' },
      ],
      missing: [{ type: 'cookie', key: 'session', value: 'active' }],
    },
  ],
}

Params

request

Middleware を定義する際、 default export 関数は一つのパラメーターrequestを受け入れます。このパラメータはNextRequestのインスタンスで、これは着信 HTTP request を表します。

middleware.ts
import type { NextRequest } from 'next/server'

export function middleware(request: NextRequest) {
  // Middleware logic goes here
}
middleware.js
export function middleware(request) {
  // Middleware logic goes here
}

Good to know:

  • NextRequestは、Next.js Middleware の中で入ってくる HTTPRequest を表す type であり、一方でNextResponseは、HTTPResponse を操作して返送するためのクラスです。

NextResponse

Middleware は、Web Response API を拡張するNextResponse object を使用できます。NextResponse object を返すことで、直接 cookies を操作したり、 headers を設定したり、 redirects を実装したり、 rewrite paths ことができます。

Good to know: redirects の場合、NextResponse.redirectの代わりにResponse.redirectも使用できます。

Runtime

Middleware はEdge runtimeのみをサポートしています。 Node.js runtime は使用できません。

Version History

VersionChanges
v13.1.0Advanced Middleware flags added
v13.0.0Middleware can modify request headers, response headers, and send responses
v12.2.0Middleware is stable, please see the upgrade guide
v12.0.9Enforce absolute URLs in Edge Runtime (PR )
v12.0.0Middleware (Beta) added

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use