Next.js生产构建报错:next/server仅可在pages/_middleware.js中导入
解决Next.js构建错误:Error: next/server should not be imported outside of pages/_middleware.js
可能的问题1:API路由环境与导入不匹配
你的API路由代码中导入了NextResponse(来自next/server),该导出仅适用于App Router的API路由(即放在app/api/[路由名]/route.js的文件)。如果你的API路由实际位于pages/api目录下(属于Pages Router),就会触发这个错误。
对应解决方法:
- 若为Pages Router的API路由(
pages/api目录下),修改代码使用NextApiRequest和NextApiResponse:
import { NextApiRequest, NextApiResponse } from "next"; import { getCurrentUser } from "@/actions/getCurrentUser"; export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method !== "POST") { return res.status(405).json({ message: "Method not allowed" }); } const currentUser = await getCurrentUser(); if (!currentUser) { return res.status(401).json({ message: "Authentication failed!" }); } return res.status(200).json("okay"); }
- 若为App Router的API路由,确保文件放在
app/api/[你的路由路径]/route.js,当前的NextResponse导入是正确的,无需修改。
可能的问题2:getCurrentUser函数存在非法导入
检查@/actions/getCurrentUser文件的代码,如果其中导入了next/server的内容(比如NextResponse),但该函数被Pages Router的API路由、客户端组件等不允许的场景调用,也会触发该错误。
对应解决方法:
- 确保
getCurrentUser仅使用符合当前执行环境的导出:服务器端场景(包括middleware、App Router API、Server Components)可使用next/server,但Pages Router的API或客户端组件中,需替换为对应环境的API(比如Pages Router用next的导出,客户端组件避免服务器端专属导出)。
可能的问题3:Middleware配置或版本不兼容
你的src/middleware.js位置符合App Router要求,但需确认:
- Next.js版本为13.0+(支持App Router),旧版本仅支持
pages/_middleware.js作为middleware文件位置。 - 使用的
next-auth版本为v4.20+,该版本开始完善对App Router middleware的支持。
对应解决方法:
- 升级Next.js到最新稳定版:
npm install next@latest - 升级next-auth到兼容版本:
npm install next-auth@latest
内容的提问来源于stack exchange,提问作者user9769384
相关产品推荐
相关产品推荐

