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

Node.js使用node-fetch调用API返回undefined的问题排查

问题原因

你这段代码有4个核心错误:

  • 你在getTemperature内部定义了一个async匿名箭头函数,但从来没有执行它,里面的网络请求逻辑根本不会运行
  • fetch方法本身返回Promise,你调用的时候没有加await,拿到的不是接口返回的响应对象,直接调用.json()必然报错
  • getTemperature函数没有写返回值,调用它默认返回undefined
  • 要处理异步请求逻辑,getTemperature本身需要声明为async函数,调用的时候也要用await或者.then()拿结果

修复后代码

import fetch from 'node-fetch';

const latLongAirports = [{
        "name": "Madrid",
        "iata": "MAD",
        "lat": 40.49565434242003,
        "long": -3.574541319609411,
    },{
        "name": "Los Angeles",
        "iata": "LAX",
        "lat": 33.93771087455066,
        "long": -118.4007447751959,
    },{
        "name": "Mexico City",
        "iata": "MEX",
        "lat": 19.437281814699613,
        "long": -99.06588831304731,
}
]

// 函数声明为async
export async function getTemperature(iata){
    let data = latLongAirports.find(el => el.iata === iata);
    if(!data) return null; // 加判空避免找不到对应iata时报错
    const url = `http://www.7timer.info/bin/api.pl?lon=${data.long}&lat=${data.lat}&product=astro&output=json`
    console.log(url);
    // 直接写请求逻辑,不需要包多余的匿名函数,fetch前加await
    const response = await fetch(url);
    const data2 = await response.json();
    console.log(data2);
    return data2; // 添加返回值
}

// 调用异步函数要用await,顶层可以用.then接收结果
getTemperature('MEX').then(res => console.log('返回结果:', res));

额外说明

如果你使用的node版本低于18,原生没有内置fetch,需要确保已经安装了node-fetch依赖:
执行npm i node-fetch@2,v3版本仅支持ESM格式,如果你用CommonJS的require语法导入需要使用v2版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:18:00