5

我对 Node.js 很陌生,所以这可能是一个基本的理解问题,但是ECONNREFUSED当我认为我不应该这样做时,我是从超级代理 http 请求中获取的:

$ curl http://localhost:5000/
{"you": "looking good"}

$ node
> var request = require("superagent");
> var req = request.get("http://localhost:5000/").on('error', function (err) {
    console.log("There's an emergency is going on.", err)
  }).end(function (data) {
    console.log("All is well", data.body)
  });

There's an emergency is going on. { [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

我做了什么假设打破了这一点?我实际上正在编写同构 JavaScript 和完全相同的代码,使浏览器上的 http 查询工作正常!

4

1 回答 1

3

这听起来像是防火墙问题,但首先ping localhost从终端运行。你应该看到localhost有 IP 127.0.0.1。如果不是,您的hosts文件可能不正确或未加载,需要修复。

如果正确,请一次尝试这些,然后重复curlsuperagent请求进行比较。如果一个步骤不起作用,则将其反转并移至下一步:

  1. 禁用任何防火墙(如果这是问题,您应该添加规则node而不是禁用防火墙)
  2. 禁用任何防病毒软件(再次添加权限而不是永久禁用)
  3. sudo setenforce 0如果您在 *nix 上(使用 撤消sudo setenforce 1
  4. curl 和 superagent 将使用不同的user-agent字符串 - 您是否正在运行代理?运行curl http://localhost:5000/ -vvv看看 curl 到底在做什么

如果这些仍然不起作用,您可以尝试使用像wiresharktcpdump这样的数据包捕获工具来跟踪 HTTP 请求并查看它在哪里被拒绝。

于 2015-02-24T13:44:43.770 回答