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

使用Node.js获取解析JSON时出现ReferenceError: data未定义错误

错误原因与解决办法

错误原因

这是在Node.js的REPL(交互式命令行)里分段输入链式代码导致的问题:

  • REPL是逐行执行代码的,当你输入完fetch(url)按回车后,这行代码会被立即执行并返回Promise对象,但后续的.then(...)被当成单独一行输入,REPL无法识别它属于之前的Promise链式调用,因此抛出Invalid REPL keyword错误。
  • 后续的my_data = data;和});被单独执行时,data变量根本不存在,自然触发ReferenceError;而});本身是无效语法,也会报错。

另外,代码里的my_data未用let/const声明,会隐式变成全局变量,属于不规范写法。

解决办法

1. 使用REPL多行输入模式

输入代码时,每写完一行不要直接按回车,而是按Shift+Enter换行,把整个链式调用代码一次性输入完成后,再按回车执行:

const fetch = require('node-fetch');
const url = 'https://gist.githubusercontent.com/gcollazo/884a489a50aec7b53765405f40c6fbd1/raw/49d1568c34090587ac82e80612a9c350108b62c5/sample.json';
fetch(url)
    .then(res => res.json())
    .then(data => {
        let my_data = data; // 加上let声明变量,避免隐式全局变量
        console.log(my_data); // 可打印结果验证
    });

2. 保存为文件运行(推荐)

把代码写入一个.js文件(比如fetch-json.js),然后在命令行执行node fetch-json.js,这样整个代码会被Node.js一次性解析执行,不会出现REPL逐行执行的问题。

3. 改用async/await写法(更直观)

在REPL里用async函数可以避免链式调用的换行问题,示例如下:

const fetch = require('node-fetch');
const url = 'https://gist.githubusercontent.com/gcollazo/884a489a50aec7b53765405f40c6fbd1/raw/49d1568c34090587ac82e80612a9c350108b62c5/sample.json';

async function getJson() {
    const res = await fetch(url);
    const my_data = await res.json();
    console.log(my_data);
}

getJson();

或者用自执行async函数:

const fetch = require('node-fetch');
const url = 'https://gist.githubusercontent.com/gcollazo/884a489a50aec7b53765405f40c6fbd1/raw/49d1568c34090587ac82e80612a9c350108b62c5/sample.json';

(async () => {
    const res = await fetch(url);
    const my_data = await res.json();
    console.log(my_data);
})();

4. 规范变量声明

不管用哪种写法,都要给my_data加上let或const声明,避免隐式全局变量的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:35:20