2015-02-24 72 views
4

我对Node.js非常陌生,所以这可能是一个基本的理解问题,但是我从一个superagent http请求中获得ECONNREFUSED,但我认为我不应该这样做:SuperAgent + Node.js连接拒绝

$ 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浏览器正常工作!

回答

3

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

如果正确,请一次试试这些,然后重复curlsuperagent请求进行比较。如果某个步骤不起作用,扭转它并移动到下一个:

  1. 禁用所有的防火墙(如果是这样的问题,您应该添加一个规则node而不是把防火墙禁用)
  2. 禁用任何防病毒(再次添加的权限,而不是永久禁用)
  3. sudo setenforce 0,如果你是在* nix(与sudo setenforce 1撤销)
  4. 卷曲的SuperAgent会使用不同的user-agent字符串 - 你有一个代理运行?运行curl http://localhost:5000/ -vvv看到什么卷曲做

如果这些仍然不工作,你可以尝试像wiresharktcpdump一个数据包捕获工具跟踪的HTTP请求,并看到它的拒绝。

+0

谢谢安迪,我仍然无法弄清楚为什么,但运行'0.0.0.0'并通过我的外部IP访问而不是回送固定它。这不是防火墙问题(Mac OS;所有防火墙都关闭)或防病毒软件,没有SELinux,用户代理似乎也没有任何影响。我会把它放到魔侏儒身上。再次感谢。 – 2015-02-25 11:47:27