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

发起GET请求读取在线文件时遭遇ECONNREFUSED连接拒绝错误求助

Fixing ECONNREFUSED Error When Fetching MTGJSON Version File

看起来你在请求MTGJSON的版本文件时遇到了连接拒绝的问题,我来帮你一步步排查和修复:

首先分析错误原因

你看到的events.js:160 throw er; // Unhandled 'error' event和Error: connect ECONNREFUSED 127.0.0.1:443,说明Node.js居然在尝试连接本地的443端口,而不是目标的mtgjson服务器。这大概率是URL定义的语法错误,再加上代码缺少错误处理、请求头配置,还有版本解析的逻辑问题,共同导致了这些报错。

具体修复步骤

1. 修正URL的语法错误

你的代码里var url = https://mtgjson.com/json/version.json没有用引号包裹URL字符串,这会让Node.js无法正确识别这是一个远程地址,进而出现错误的请求目标。必须把URL放在单引号或双引号里:

var url = 'https://mtgjson.com/json/version.json';

2. 添加符合要求的请求头

目标服务器可能会拒绝缺少必要请求头的请求,比如很多服务器会要求有User-Agent字段。结合你提供的请求头信息,我们可以在HTTPS请求时配置完整的请求头:

const options = {
  hostname: 'mtgjson.com',
  path: '/json/version.json',
  headers: {
    'Accept': 'application/json', // 明确请求JSON格式,比通用的更精准
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3',
    'User-Agent': 'Node.js MTGJSON Updater' // 必须添加,避免被服务器拦截
  }
};

3. 必须监听请求的错误事件

你的代码没有处理请求失败的情况,一旦连接出问题就会抛出未处理的异常。一定要添加error事件的监听:

https.get(options, function(res) {
  // 响应处理逻辑
}).on('error', function(err) {
  console.error('请求出错啦:', err.message);
  // 这里可以添加错误后的回调或降级处理
});

4. 正确解析版本号

你用jsonObject.toString()会得到[object Object],这根本不是版本号。MTGJSON的version.json里应该有明确的版本字段(比如version),所以要提取对应的属性:

const version = jsonObject.version;

5. 注意拼接完整的响应数据

data事件可能会多次触发(比如数据分块传输),直接在data事件里解析JSON会得到不完整的内容,导致解析错误。需要先拼接所有数据块,再在end事件里解析:

let rawData = '';
res.on('data', function(chunk) {
  rawData += chunk;
});

res.on('end', function() {
  try {
    const jsonObject = JSON.parse(rawData);
    // 后续版本判断逻辑
  } catch (e) {
    console.error('JSON解析出错:', e.message);
  }
});

完整的修正代码

const https = require('https');

// 假设这是你之前保存的本地版本号
let currentVersion = '5.10.0';

function update() {
  console.log('开始执行更新逻辑...');
  // 这里写你的文件更新代码
}

function callback() {
  console.log('无需更新,继续执行后续操作...');
}

const options = {
  hostname: 'mtgjson.com',
  path: '/json/version.json',
  headers: {
    'Accept': 'application/json',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3',
    'User-Agent': 'Node.js MTGJSON Updater'
  }
};

https.get(options, function(res) {
  res.setEncoding('utf8');
  let rawData = '';

  res.on('data', function(chunk) {
    rawData += chunk;
  });

  res.on('end', function() {
    try {
      const jsonObject = JSON.parse(rawData);
      const remoteVersion = jsonObject.version;
      
      console.log('远程版本:', remoteVersion);
      console.log('本地版本:', currentVersion);

      if (remoteVersion !== currentVersion) {
        console.log('发现新版本!开始更新...');
        currentVersion = remoteVersion;
        update();
      } else {
        console.log('当前已是最新版本,无需更新');
        callback();
      }
    } catch (e) {
      console.error('解析JSON失败:', e.message);
    }
  });
}).on('error', function(err) {
  console.error('请求MTGJSON服务器失败:', err.message);
});

额外提示

如果服务器返回的是压缩数据(比如gzip格式),你可能需要用zlib模块来解压数据。不过大多数情况下,Node.js的HTTPS模块会自动处理,但如果遇到解压错误,可以手动添加解压逻辑。

内容的提问来源于stack exchange,提问作者Werner Germán Busch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:18:10