🌊
Next.js12でリリースされたmiddlewareを使ってみる
about
/pages/_middleware.js(ts)
ファイルが作成されている場合、/pages
ディレクトリ以下全てのページ(route)で実行される。
_middleware.js
ファイルが複数のディレクトリに配置されている場合は、階層が浅い方から順に実行されていく。
例: /pages/about/_middleware.js
と、/pages/about/team/_middleware.js
がある場合、about配下の_middleware.js
が最初に実行され、その次にabout/team配下の方が実行される。
- package.json
- /pages
index.tsx
- /about
_middleware.ts # 最初に実行
about.tsx
- /teams
_middleware.ts # 2番目に実行
teams.tsx
docs
use
- Next.js12のプロジェクトを作成
npx create-next-app@latest --ts
# or
yarn create next-app --typescript
or
既存のプロジェクトに最新のnextをインストール
npm install next@latest
-
pages以下にmiddlewareファイルを作成
touch pages/_middleware.ts
-
_middleware.ts
に以下を記述
import type { NextFetchEvent, NextRequest } from 'next/server'
export function middleware(req: NextRequest, ev: NextFetchEvent) {
return new Response('Hello, world!')
}
ミドルウェアはmiddleware
関数によって作成される。
-
http://localhost:3000/ にアクセスすると、Hello, world!と表示される
middleware examples
headerを追加する
クエリパタメータをチェックして、許可されていない場合はリダイレクトする
import { NextRequest, NextResponse } from 'next/server'
const allowedParams = ['hoge']
export function middleware(req: NextRequest) {
const url = req.nextUrl
let changed = false
url.searchParams.forEach((_, key) => {
if (!allowedParams.includes(key)) {
url.searchParams.delete(key)
changed = true
}
})
if (changed) {
return NextResponse.redirect(url)
}
}
Discussion