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

Express正常运行的API代码在Next.js/React中报Cannot read properties错误

解决Next.js/React中使用gsmarena-api时的"Cannot read properties of undefined (reading 'catalog')"错误

问题核心

错误源于gsmarena对象未正确导入,同时代码存在语法错误,另外React客户端环境直接使用该库还会遇到Node.js API依赖的限制。

修复步骤

1. 修正模块导入方式

gsmarena-api是CommonJS模块,采用默认导出而非命名导出。将Next.js中的导入语句修改为:

import gsmarena from "gsmarena-api";

原代码import {gsmarena} from "gsmarena-api"会导致gsmarena变量为undefined,因为库中不存在这个命名导出项。

2. 修复Next.js API路由的语法错误

你的代码返回语句中{ data: any }是错误写法——any是TypeScript类型关键字,不能直接作为值使用,需替换为实际变量name:

export async function GET() {
  const devices = await gsmarena.catalog.getBrand("apple-phones-48");
  const name = devices.map((device: any) => device.name);
   
  return Response.json({ data: name });
}

3. React客户端环境适配

该库基于Node.js环境开发,依赖Node专属API(如服务端HTTP请求模块),直接在React客户端组件中调用会报错。推荐解决方案:

  • 通过Next.js API路由中转:客户端组件使用fetch('/api/phonelist')请求你编写的API路由,由服务端完成gsmarena-api的调用
  • 若必须在客户端使用,需替换库中的Node专属依赖(如将node-fetch替换为浏览器原生fetch),但这种方式需要修改库源码,成本较高,不推荐

验证

修改完成后重启Next.js开发服务器,访问API路由即可正常返回苹果设备名称列表;React客户端通过fetch请求该接口即可获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:46:09