我在Next.js项目中有一个中间件,我想否定我的/api/*路由。换句话说,我希望中间件能为除了以/api/开头的路由之外的所有路由运行。我在docs中找不到一个例子。我如何实现这一点(当然,不需要一个接一个地写所有 included 路由)?
/api/*
/api/
quhf5bfb1#
看起来中间件文档已经更新了,以解决类似的问题。nextjs middleware docs
export const config = { matcher: [ /* * Match all request paths except for the ones starting with: * - api (API routes) * - static (static files) * - favicon.ico (favicon file) */ '/((?!api|static|favicon.ico).*)', ], }
piah890a2#
matcher不能这样做,因为它只接受简单的路径模式,所以你需要使用条件语句:
export function middleware(request: NextRequest) { if (request.nextUrl.pathname.startsWith('/api/')) { return NextResponse.next() } // your middleware logic }
piok6c0g3#
也许会有帮助
const matcherRegex = new RegExp('^(?!/(?:_next/static|favicon\\.ico|swc\\.js|api)(?:/|$))'); export function middleware(request: NextRequest){ const isMiddlewareAllowed = matcherRegex.test(pathname) if (isMiddlewareAllowed) { //... }else return }
3条答案
按热度按时间quhf5bfb1#
看起来中间件文档已经更新了,以解决类似的问题。
nextjs middleware docs
piah890a2#
matcher不能这样做,因为它只接受简单的路径模式,所以你需要使用条件语句:
piok6c0g3#
也许会有帮助