【问题标题】:Error Connect ECONNREFUSED at err connect错误连接 ECONNREFUSED 在错误连接
【发布时间】:2019-04-15 00:13:20
【问题描述】:

我正在尝试运行 nodejs 程序并收到错误:

 if (err) throw err;
           ^

Error: connect ECONNREFUSED 54.144.222.65:80
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)

现在,我用 Google 搜索并搜索了 Stack Overflow,有几个与此相关的问题。但是不要将此问题标记为“已经解决”,因为所有这些问题都有没有解决问题的答案。 (例如,有些需要连接到正在运行但未运行的本地服务器,答案是“运行服务器”,但我的问题不是这种情况)

我认为最接近我的问题的是the accepted answer to this question。我也支持公司代理。但是我按照答案的建议做了,我的代理被设置为正确的代理。

我也做了npm config list,我得到了

; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/5.5.1 node/v8.9.1 win32 x64"

; userconfig C:\Users\me\.npmrc
http-proxy = "http://192.168.1.252:8080"
https-proxy = "http://192.168.1.252:8080/"
proxy = "http://192.168.1.252:8080/"
registry = "https://registry.npmjs.org/"
strict-ssl = false

; builtin config undefined
prefix = "C:\\Users\\me\\AppData\\Roaming\\npm"

; node bin location = C:\Program Files\nodejs\node.exe
; cwd = D:\me\path\to\code_Node.js\code\3\random_story
; HOME = C:\Users\me
; "npm config ls -l" to show all defaults.

问题

我正在尝试运行此代码

var fs = require('fs');
var request = require('request');
var htmlparser = require('htmlparser');
var configFilename = './rss_feeds.txt';

function checkForRSSFile () {
  fs.exists(configFilename, function(exists) {    //fs exists has been deprecated  udr fs.stat() or fs.acess() instead
    if (!exists)
      return next(new Error('Missing RSS file: ' + configFilename));

    console.log("Next for "+configFilename);
    next(null, configFilename);
  });
}

function readRSSFile (configFilename) {
  fs.readFile(configFilename, function(err, feedList) {
    if (err) return next(err);

    feedList = feedList
               .toString()
               .replace(/^\s+|\s+$/g, '')
               .split("\n");
    var random = Math.floor(Math.random()*feedList.length);
    console.log("Next for feedList[random] "+ feedList[random]);
    next(null, feedList[random]);
  });
}

function downloadRSSFeed (feedUrl) {
  request({uri: feedUrl}, function(err, res, body) {
    if (err)  throw err;//return next(err);  //<=====HERE ! THE ERROR IS HERE!!
    if (res.statusCode != 200)
      return next(new Error('Abnormal response status code'))
    console.log(body);
    next(null, body);
  });
}
/*
function parseRSSFeed (rss) {
  var handler = new htmlparser.RssHandler();
  var parser = new htmlparser.Parser(handler);
  parser.parseComplete(rss);

  if (!handler.dom.items.length)
    return next(new Error('No RSS items found'));

  var item = handler.dom.items.shift();
  console.log(item.title);
  console.log(item.link);
}

var tasks = [ checkForRSSFile,
              readRSSFile,
              downloadRSSFeed,
              parseRSSFeed ];
*/

var tasks= [ checkForRSSFile,
             readRSSFile,
             downloadRSSFeed];
function next(err, result) {
  if (err) throw err;

  var currentTask = tasks.shift();

  if (currentTask) {
    currentTask(result);
  }
}

next();

如您所见,当尝试抛出错误时,downloadRSSFeed 中发生了错误。 rss_feed.txt 有一些 RSS 地址,例如 http://dave.smallpict.com/rss.xml

编辑: 我实际上在this link 中找到了这个问题的“解决方案”。 (好吧,解决方案有点牵强。它解决了 this 问题,但我还无法连接到网站,但我想这不是我猜的程序问题)

解决办法是把代理信息放在request

function downloadRSSFeed (feedUrl) {
  request({uri: feedUrl,
           'proxy':'http://192.168.1.252:8080'

           },
           function(err, res, body) {
    if (err)  throw err;//return next(err);  //<=====HERE ! THE ERROR IS HERE!!
    if (res.statusCode != 200)
      return next(new Error('Abnormal response status code'))
    console.log(body);
    next(null, body);
  });
}

正如我所说的它还没有工作,我收到了异常响应状态代码错误,但至少看起来更进一步

【问题讨论】:

  • 错误ECONNREFUSED 正是它听起来的样子:连接被您尝试连接的系统拒绝。在指定地址和端口的远程系统上是否有东西在监听?
  • 我相信的任何远程系统都会发生此错误。远程系统是我发布的 url,所以它是外部的
  • 有吗?那么stackoverflow.com/feeds 在使用有效的 DNS 可解析名称和有效的 URL 时会出现同样的错误吗?如果是这样,那么您有连接问题,这不是要在此处解决的“编程”问题。如果您可以从您的程序访问该 URL,那么这是与您的其他来源的“内部”连接问题。
  • 我实际上找到了问题的根源。我将把它写在这个问题的编辑中。但是现在我有一个不同的问题:(

标签: node.js proxy npm-install


【解决方案1】:

错误 ECONNREFUSED 正是它听起来的样子:连接被您尝试连接的系统拒绝,原因是端口号 80 已在另一个应用程序中使用。更改端口号并尝试运行应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2015-07-27
    • 2014-05-20
    • 2021-03-14
    • 2017-04-14
    相关资源
    最近更新 更多