Node.js用https.request发起GET请求AVWX API出现ECONNRESET错误
问题根因
你遇到的ECONNRESET错误核心有两个直接原因:
- Node.js 原生
https.request方法创建请求对象后,必须手动调用.end()方法才能实际发送请求,你当前代码未调用该方法,导致连接一直处于挂起状态,远端服务超时后主动断开连接,触发连接重置错误 - 未给请求对象绑定
error事件监听,导致连接异常时直接抛出未处理错误导致进程崩溃
修复代码
替换为如下代码即可正常发起请求:
const https = require('https'); const req = https.request({ hostname: 'avwx.rest', port: 443, path: '/api/metar/KJFK', method: 'GET', headers: { 'Authorization': '替换为你的有效AVWX接口令牌', // 新增User-Agent头,避免服务商拦截无标识的请求 'User-Agent': 'Node.js AVWX Client' }, }, res => { console.log(`响应状态码: ${res.statusCode}`); // 接收响应数据 res.on('data', chunk => { process.stdout.write(chunk); }); // 响应接收完成回调 res.on('end', () => { console.log('\n请求处理完成'); }); }); // 绑定请求错误监听,避免进程直接崩溃 req.on('error', err => { console.error('请求异常: ', err); }); // 核心:手动发起请求 req.end();
其他排查点
如果修改后仍有错误,可以按顺序排查:
- 确认你的
Authorization令牌有效且未过期,拥有对应接口的调用权限 - 先用Postman、curl等工具直接调用该接口,确认接口本身可访问,排除本地网络、防火墙、代理拦截的问题
- 若本地使用网络代理,需要给
https.request额外配置代理参数,否则请求会被拦截 - 升级Node.js到16.x以上的LTS版本,避免旧版本TLS协议支持不完善导致的连接异常
内容的提问来源于stack exchange,提问作者Viriato
相关产品推荐
相关产品推荐

