You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

本地运行正常但Vercel部署报错:读取'titulo_categoria'未定义

排查部署到Vercel后Prismic数据获取失败的问题

这个错误TypeError: Cannot read property 'titulo_categoria' of undefined很明确:你的组件里尝试访问cat.titulo_categoria,但cat本身是undefined。结合本地正常、部署异常的情况,我们可以从以下几个方向排查:

一、最可能的原因:Vercel环境变量未正确配置

本地运行时你可能在.env文件里配置了Prismic的相关密钥,但部署到Vercel时这些变量不会自动同步,导致API请求失败,最终data为空,cat变成undefined

解决步骤:

  1. 打开Vercel项目的Settings -> Environment Variables页面
  2. 确认以下变量是否和本地.env文件完全一致:
    • PRISMIC_REPOSITORY_NAME
    • PRISMIC_API_TOKEN
    • PRISMIC_REPOSITORY_LOCALE
  3. 配置完成后重新触发一次部署(可以手动在Vercel控制台点击"Redeploy")

二、fallback: true导致的空值未处理

你的getStaticPaths设置了fallback: true,这意味着当用户访问未预渲染的路径时,Vercel会实时运行getStaticProps获取数据。如果此时传入的slug在Prismic中不存在,data.categorias会是null,组件直接访问cat.titulo_categoria就会报错。

解决步骤:

在组件中添加空值检查,避免直接访问未定义的属性:

export default function Index({cat}) {
  // 处理cat为空的情况
  if (!cat) {
    return <div>分类不存在或加载中...</div>;
  }
  // 额外给titulo_categoria加可选链,防止字段结构异常
  return <>{cat.titulo_categoria?.[0]?.text}</>;
}

三、API请求或查询逻辑问题

本地和部署环境的请求可能存在差异,比如语言参数不匹配、查询语法错误等。可以通过日志排查:

解决步骤:

  1. getStaticProps中添加日志,打印关键数据:
export async function getStaticProps({params}) {
  console.log("当前请求的slug:", params.slug);
  const data = await getCategory2(params.slug);
  console.log("Prismic返回的数据:", data);
  return {
    props: {
      cat: data?.categorias ?? null,
    },
  };
}
  1. 部署后查看Vercel的Deployment Logs,确认:
    • params.slug是否符合预期
    • data是否包含categorias字段
  2. 到Prismic的GraphQL Playground中测试你的查询,传入部署环境中使用的sluglang参数,看是否能正常返回数据:
query CategoryBySlug($slug: String!, $lang: String!) {
  categorias(uid: $slug, lang: $lang) {
    titulo_categoria
    _meta {
      uid
    }
  }
}

四、API Token权限问题

如果你的Prismic API Token是预览专用的(而非永久访问令牌),部署环境可能无法正常读取数据。确认你在Vercel中配置的是Prismic的永久访问令牌,并且该令牌拥有读取数据的权限。

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

火山引擎 最新活动