2015-02-24 5 views
4

Я довольно новичок в Node.js, так что это возможно основная проблема понимания, но я получаю ECONNREFUSED от суперагентного http-запроса, когда я не думаю, что должен быть:Соединение 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, вероятно, неправильный или не загружаемый, и ему потребуется исправление.

Если все правильно, попробуйте по одному, а затем повторите curl и superagent запросы на сравнение. Если один шаг не работает, отменить его и перейти к следующему:

  1. отключить любой брандмауэр (если это проблема, вы должны добавить правило для node вместо того, чтобы оставить брандмауэр отключен)
  2. отключить любой анти-вирус (снова добавить разрешения, а не постоянно отключать)
  3. sudo setenforce 0 если вы на * NIX (отменить с sudo setenforce 1)
  4. локон и SuperAgent будет использовать различные user-agent строки - есть ли у вас прокси работает? Запуск curl http://localhost:5000/ -vvv, чтобы увидеть именно то, что локон делает

Если они до сих пор не работает, вы можете попробовать инструмент захвата пакетов, как wireshark или tcpdump отследить запрос HTTP и посмотреть, где он отказался.

+0

Спасибо Andy, я до сих пор не могу понять, почему, но работает на '0.0.0.0' и доступ через мой внешний IP, а не loopback, исправил его. Это не проблема брандмауэра (Mac OS, все брандмауэры) или антивирусная вещь, нет SELinux, и пользовательский агент, похоже, не имеет никакого эффекта. Я отдам его волшебным гномам. Еще раз спасибо. –

Смежные вопросы