Skip to content

中间件

定义中间件

在 Next.js 中,中间件是位于请求和响应之间的函数,可以用来处理请求、修改响应或执行其他操作。中间件文件必须命名为 middleware.jsmiddleware.ts

重定向

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

export function middleware(request: NextRequest) {
  return NextResponse.redirect(new URL('/', request.url))
}

export const config = {
  matcher: '/profile', // 只匹配 /profile 路径
}

或者:

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

export function middleware(request: NextRequest) {
  if (request.nextUrl.pathname === '/profile') {
    return NextResponse.redirect(new URL('/', request.url))
  }
}

重写

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

export function middleware(request: NextRequest) {
  if (request.nextUrl.pathname === '/profile') {
    return NextResponse.rewrite(new URL('/', request.url))
  }
}

请求放行

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

export function middleware(request: NextRequest) {
  const response = NextResponse.next()

  // 进行一些操作,比如:通过 cookie 设置主题、添加自定义头 ……
  const themePreference = request.cookies.get('theme')
  if (!themePreference) {
    response.cookies.set('theme', 'dark')
  }

  response.headers.set('x-custom-header', 'value')

  return response
}

基于 MIT 许可发布