Next.js预渲染报错:/home页面auth解构失败致Vercel构建终止
我将应用根目录的入口文件用作数据层,通过getServerSession获取会话信息实现页面重定向:无会话时重定向至/home页面。但Vercel构建时出现预渲染错误,报错显示预渲染/home页面时无法解构未定义对象的auth属性,导致构建终止。
相关代码
import { NextRequest, NextResponse } from "next/server"; import { getToken } from "next-auth/jwt"; export async function proxy(req: NextRequest) { const token = await getToken({req: req as any}); if (!token || !token.role) { return NextResponse.redirect(new URL("/home", req.url)); } return NextResponse.next(); } export const config = { matcher: ["/"] } "use server"; import { authOptions } from "@vendora/auth"; import { getServerSession } from "next-auth"; import { redirect } from "next/navigation"; export async function Index() { const session = await getServerSession(authOptions); if (!session?.user.role) { redirect("/onboarding") } switch (session.user.role) { case "buyer": redirect(process.env.NEXT_PUBLIC_STORE_URL as string); case "seller": redirect(process.env.NEXT_PUBLIC_SELLER_URL as string); case "admin": redirect(process.env.NEXT_PUBLIC_ADMIN_URL as string); default: redirect("/home") } }
报错详情
生成静态页面(0/27)... 生成静态页面(6/27) 预渲染页面"/home"时出错。
TypeError: 无法解构未定义对象'a'的属性'auth'。
at f (.next/server/chunks/711.js:17:51199)
at p (.next/server/chunks/711.js:1:41685)
at (.next/server/chunks/711.js:1:42254)
at q (.next/server/chunks/711.js:1:42235) { digest: '3188648309' }导出时在/home/page页面遇到错误:/home,终止构建。
⨯ Next.js构建进程退出,代码:1,信号:null
ELIFECYCLE 命令执行失败,退出码1。错误:命令"pnpm run build"退出码为1
排查
/home页面的代码逻辑
报错核心是/home页面预渲染时尝试解构未定义的auth对象,先检查/home/page.tsx(对应页面文件)中的相关代码,确保访问auth属性前先判断对象是否存在。比如:// 错误写法:直接解构未定义对象 const { auth } = someUndefinedValue; // 修复写法:可选链判断存在性 const auth = someValue?.auth;调整重定向逻辑,避免循环预渲染冲突
当前根目录的proxy函数无token时跳/home,而Index函数无会话时跳/onboarding,逻辑存在冲突。建议统一规则:- 若
/home是公开页面,确保它不依赖任何会话相关的逻辑,避免预渲染时因无会话触发错误; - 若
/home需要会话,修改根目录重定向逻辑,无会话时直接跳登录页而非/home。
- 若
标记
/home页面为动态渲染
如果/home页面依赖用户会话(属于动态内容),在页面文件中添加配置,禁用预渲染:// 在/home/page.tsx中添加 export const dynamic = "force-dynamic";验证
authOptions配置完整性
检查@vendora/auth导出的authOptions是否正确配置了session、providers等核心字段,确保getServerSession能正常返回会话数据,避免因返回undefined导致后续逻辑报错。
内容的提问来源于stack exchange,提问作者Peter Muguro

