You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中使用getServerSideProps出现无法读取page属性的TypeError求助

解决TypeError: Cannot read properties of undefined (reading 'page')问题

出现这个错误的核心原因是data对象为undefined,导致无法读取data.page。以下是针对性的排查和修复步骤:

1. 修复fetch函数中的变量冲突与错误处理

你的getLikedArtwork函数存在变量名重复问题,且缺少错误捕获逻辑,可能导致请求失败时返回undefined:

const getLikedArtwork = async (userID: string, page: number) => {
  try {
    // 避免变量名重复,改用fetchResponse命名
    const fetchResponse = await fetch(`http://${api}/likedArtwork?page=${page.toString()}&userID=${userID}`);
    // 检查HTTP响应状态,确保请求成功
    if (!fetchResponse.ok) {
      throw new Error(`请求失败:${fetchResponse.status}`);
    }
    const responseData: LikedListRes = await fetchResponse.json();
    return responseData;
  } catch (error) {
    console.error('获取收藏作品失败:', error);
    // 返回默认值,确保不会返回undefined
    return { LikedArtwork: [], page: 0 };
  }
}

2. 确认动态路由参数的正确性

如果你的页面路由文件是[userId].tsx而非[id].tsx,那么params.id会是undefined,导致请求的userID无效,后端可能返回错误数据:

// 假设路由文件是[userId].tsx,修改参数键名匹配路由
const res = await getLikedArtwork(params?.userId as string, 0);

3. 给组件props添加默认值

即使请求出现异常,也能保证组件有默认数据可用,避免报错:

const Account: NextPage<{data: LikedListRes}> = ({data = { LikedArtwork: [], page: 0 }}) => {
  return (
    <Grid container spacing={2}>
      <Grid xs={4} sm={4} md={4} lg={4}></Grid>
      <Grid xs={8} sm={8} md={8} lg={8}>
        <Box sx={{margin: 'auto'}}>
          <LikedArtworks page={data.page} likedArtwork={data.LikedArtwork} />
        </Box>
      </Grid>
    </Grid>
  )
}

4. 验证fetch返回数据

在getServerSideProps中添加日志,确认返回的res是否符合LikedListRes类型:

const res = await getLikedArtwork(params?.id as string, 0);
console.log('获取到的数据:', res); // 在服务器控制台查看输出
return { props: { data: res } };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:45:33