如何在Next.js中配置Middleware排除/api/*路由?
在Next.js中让Middleware排除/api/*路由的实现方法
有两种简洁的方式可以实现这个需求,不用逐个列举需要包含的路由:
方法一:在Middleware函数内部判断路径
直接在Middleware逻辑里检查请求路径是否以/api/开头,是的话直接放行,否则执行你的业务逻辑:
import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export function middleware(request: NextRequest) { // 跳过所有/api/开头的路由 if (request.nextUrl.pathname.startsWith('/api/')) { return NextResponse.next(); } // 这里写你要在非API路由执行的逻辑 // 比如用户认证、页面重定向、响应头修改等 // 示例:打印当前路由 console.log('Middleware triggered on:', request.nextUrl.pathname); // 继续处理请求 return NextResponse.next(); }
方法二:用config.matcher的否定匹配模式
Next.js的Middleware支持通过matcher配置路由匹配规则,其中可以使用负向前瞻正则来排除特定路由,这种方式更高效,因为Middleware只会在匹配的路由上触发,不会进入函数内部判断:
import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export function middleware(request: NextRequest) { // 这里直接写你的非API路由逻辑即可 return NextResponse.next(); } // 配置匹配所有路由,除了/api/开头的路径 export const config = { matcher: [ '/((?!api/).*)', ], };
关于matcher正则的说明
/((?!api/).*)是正则的负向前瞻语法,意思是:匹配任何不包含api/开头的路径。这个规则会自动覆盖所有非API路由,不用手动添加其他路由规则。
两种方法的选择
- 如果需要在排除API路由前做一些额外检查(比如某些特殊API路由需要执行Middleware),用方法一更灵活;
- 如果只是单纯完全排除所有
/api/*路由,方法二更高效,因为Middleware不会在API路由上被触发。
内容的提问来源于stack exchange,提问作者Can Poyrazoğlu
相关产品推荐
相关产品推荐

