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

修复TypeError: Cannot read properties of undefined (reading 'results')问题

解决Node.js调用Naver API时getRatios函数返回undefined导致的TypeError问题

问题根源

getRatios函数已成功获取API返回的storage数据,但未正确返回处理后的数据,导致调用方接收的click_ratio_json为undefined,进而触发TypeError: Cannot read properties of undefined (reading 'results')错误。

解决方案:修正getRatios函数

确保函数正确返回仅包含results中period和ratio字段的数据,同时增加异常处理避免额外错误。以下是修正后的代码:

错误版本示例(供对比)

async function getRatios(keyword) {
  const response = await axios.get('naver-api-endpoint', { params: { keyword } });
  const storage = response.data;
  // 错误:仅执行转换但未返回结果
  storage.results.map(item => ({ period: item.period, ratio: item.ratio }));
}

修正后的函数

async function getRatios(keyword) {
  try {
    // 调用Naver API(替换为实际接口地址,补充认证头)
    const response = await axios.get('https://openapi.naver.com/v1/datalab/search', {
      headers: {
        'X-Naver-Client-Id': '你的客户端ID',
        'X-Naver-Client-Secret': '你的客户端密钥'
      },
      params: {
        keyword: keyword,
        // 补充API要求的其他参数,如时间范围等
      }
    });

    const storage = response.data;
    // 校验数据结构,避免空值异常
    if (!storage || !storage.results) {
      throw new Error("API返回数据格式异常,缺少results字段");
    }

    // 提取目标字段并返回
    return storage.results.map(item => ({
      period: item.period,
      ratio: item.ratio
    }));
  } catch (error) {
    console.error("获取数据失败:", error.message);
    throw error; // 向上抛出错误,让调用方处理
  }
}

关键修改点

  • 添加return语句:原函数仅执行了map转换但未返回结果,修正后返回处理后的数组。
  • 增加数据校验:先判断storage和storage.results是否存在,避免API返回结构异常引发新错误。
  • 异常捕获:用try/catch包裹API调用逻辑,捕获请求错误并向上抛出,方便调用方统一处理。

终端输入关键词的完整流程示例

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('请输入关键词:', async (keyword) => {
  try {
    const click_ratio_json = await getRatios(keyword);
    
    // 输出处理后的数据
    console.log('\n处理后的点击比率数据:');
    click_ratio_json.forEach(item => {
      console.log(`时间:${item.period},比率:${item.ratio}`);
    });

    // 示例:计算平均比率
    if (click_ratio_json.length > 0) {
      const total = click_ratio_json.reduce((sum, item) => sum + parseFloat(item.ratio), 0);
      const avgRatio = (total / click_ratio_json.length).toFixed(2);
      console.log(`\n关键词「${keyword}」的平均点击比率:${avgRatio}`);
    }
  } catch (error) {
    console.error('\n操作失败:', error.message);
  } finally {
    rl.close();
  }
});

内容的提问来源于stack exchange,提问作者HEO.JY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:32:10