NextJS:仅为 /pages 运行中间件

Emm*_*pos 6 next.js

最近有关中间件的更改https://nextjs.org/docs/messages/middleware-upgrade-guide

现在中间件也会被/_next和的请求触发/favicon.ico

仅针对文件夹请求触发它的最佳方法是什么/pages?有匹配器,但是在其中输入所有页面会很麻烦。

我目前正在使用中间件来检查 cookie 是否存在,并在用户访问页面时重定向用户。例如,如果用户访问/并且用户尚未登录,则将用户重定向到/login。

Gab*_*ssi 8

现在中间件已经稳定(>=12.2),您可以在匹配器上使用正则表达式来排除某些路径。

export const config = {
  // matcher solution for public, api, assets and _next exclusion
  matcher: "/((?!api|static|.*\\..*|_next).*)",
};
Run Code Online (Sandbox Code Playgroud)

参考: https: //github.com/vercel/next.js/discussions/36308#discussioncomment-3758041


bna*_*mhz -2

这是中间件的片段:

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

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

// See "Matching Paths" below to learn more
export const config = {
  matcher: '/about/:path*',
}
Run Code Online (Sandbox Code Playgroud)

如果您希望中间件在所有路径上运行:

export const config = {
  matcher: '/:path*',
}
Run Code Online (Sandbox Code Playgroud)

你尝试过这个吗?