NextJS App Router项目中middleware.ts未触发问题求助
Next.js App Router 中间件不触发问题解决
核心问题:中间件位置错误
Next.js App Router 对中间件的位置有严格要求,不能放在src/app目录下,必须放在以下两个位置之一:
- 项目根目录(与
src文件夹同级) src目录的根路径下(即src/middleware.ts)
你之前把middleware.ts放在src/app里,Next.js不会识别这个位置的中间件,所以完全不会触发。
解决"Invalid middleware found"错误
当你把中间件移到正确位置后出现该错误,通常是以下原因:
1. 中间件代码结构不符合要求
必须默认导出一个接收NextRequest参数的函数,并且正确导入必要的类型。示例正确代码:
import { NextRequest, NextResponse } from 'next/server'; export default function middleware(request: NextRequest) { // 测试用日志,验证是否触发 console.log('Middleware triggered:', request.nextUrl.pathname); return NextResponse.next(); } // 可选:配置匹配路径(不配置则默认匹配所有路径) export const config = { matcher: ['/login', '/dashboard/:path*'], // 根据你的需求调整 };
2. 避免混合App Router与Pages Router
删除你在src/app下添加的pages文件夹,App Router的页面规则是直接在src/app下创建子文件夹并放置page.tsx,混合Pages Router的目录结构会导致Next.js路由逻辑混乱,反而引发错误。
3. 检查tsconfig配置
你的当前tsconfiginclude规则"**/*.ts"已经能匹配到根目录或src根目录的middleware.ts,无需额外修改。如果仍有问题,可以尝试明确添加路径:
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "middleware.ts", "src/middleware.ts"]
验证步骤
- 确保中间件放在正确位置
- 重启Next.js开发服务器(重要!修改中间件位置后必须重启)
- 访问
/login或其他路由,查看终端日志是否有中间件的打印内容,确认触发状态
内容的提问来源于stack exchange,提问作者timhortons1234
相关产品推荐
相关产品推荐

