You need to enable JavaScript to run this app. Next.js getServerSideProps返回results字段JSON序列化报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Next.js getServerSideProps返回results字段JSON序列化报错如何解决?

报错产生原因

Next.js要求getServerSideProps返回的所有props必须可以序列化为标准JSON格式,而undefined不属于合法JSON值,当返回的results值为undefined时就会触发该序列化错误。

results为undefined通常由以下两类原因导致:

  • 网络请求失败、接口鉴权失败、请求参数错误导致TMDB返回错误响应,响应体中没有results字段
  • 配置的requests对象中找不到对应genre的url、也不存在fetchTrending配置,导致请求路径错误,接口返回异常结构
可行修复方案

方案1:添加请求异常捕获 + 字段兜底

在请求逻辑中添加错误处理,同时对results字段设置兜底值,代码修改示例如下:

export async function getServerSideProps(context) {
  const genre = context.query.genre;
  let results = []; // 兜底默认值可以根据业务需要改成null
  try {
    const requestUrl = `https://api.themoviedb.org/3${
      requests[genre]?.url || requests?.fetchTrending?.url || ''
    }`;
    // 校验请求路径是否合法
    if (!requestUrl) throw new Error('无效的请求路径');
    const res = await fetch(requestUrl);
    // 校验请求状态是否成功
    if (!res.ok) throw new Error(`接口请求失败,状态码:${res.status}`);
    const data = await res.json();
    results = data.results || [];
  } catch (e) {
    console.error('请求出错:', e);
    // 业务侧可以在这里做额外的错误处理逻辑
  }

  return {
    props: {
      results,
    },
  };
}

方案2:极简兜底(适用于不需要精细错误处理的场景)

直接在返回props时把undefined替换为合法JSON值即可:

return {
  props: {
    results: request.results ?? null, // 空值合并运算符兜底为null
  },
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 17:45:04