You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"]

验证步骤

  1. 确保中间件放在正确位置
  2. 重启Next.js开发服务器(重要!修改中间件位置后必须重启)
  3. 访问/login或其他路由,查看终端日志是否有中间件的打印内容,确认触发状态

内容的提问来源于stack exchange,提问作者timhortons1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:52:18