Next.js 13.5.3中间件命名与放置位置的疑问
Next.js 13.5.3 中间件问题解答
问题1:中间件文件名是否需要以“_”开头?
分两种路由架构情况:
- Pages Router(以pages目录为核心的旧架构):中间件文件名必须以
_开头,即_middleware.js(或.ts),这是框架的约定规则,只有这个命名的文件才会被识别为Pages Router的中间件。 - App Router(以app目录为核心的新架构):中间件文件名不需要加
_,直接命名为middleware.js(或.ts)即可。
问题2:应将中间件文件放在哪个目录才能使用NextResponse?
同样分架构说明:
- Pages Router:必须将
_middleware.js放在pages目录下,此时导入next/server的NextResponse是完全合法的,ESLint不会报错。你之前改到pages/_middleware.js时出现构建错误,大概率是代码逻辑问题(比如未正确返回NextResponse实例、请求对象处理不当等),而非路径或命名问题。 - App Router:直接将
middleware.js放在项目根目录(和app、pages目录同级),这里导入next/server的NextResponse符合规则。你之前移到根目录仍报ESLint错误,可能是ESLint插件版本未匹配Next.js 13.5.3,或是项目同时混合了Pages和App Router导致规则冲突,建议检查@next/eslint-plugin-next的版本是否和Next.js版本一致。
内容的提问来源于stack exchange,提问作者pneuma
相关产品推荐
相关产品推荐

