2016-06-24 4 views
2

Я написал короткую программу в nodejs, которая должна передавать данные POST на сервер. К сожалению, эта программа не работает. Интересно, однако, что я использовал wirehark, чтобы посмотреть, что делают запросы, и я не вижу столько TCP SYN-пакетов, сколько я сделал.Nodejs не отправляет запрос синхронизации на сервер, ошибка EHOSTUNREACH

Программа содержится здесь.

//ServerTestv1.js 

var request = require('request'); 
var grouper = require('./grouper'); //Placeholder program. 

function sendSomething(obj){ 
    request.post(obj, function(error, response, body){ 
    if(response == undefined){ //This happens sometimes. I 'unno why. 
     reject(error); 
     console.log('Undefined POST Response, ' + error); 
    } else if(response.statusCode != 201 || error){ 
     reject(error); 
     console.log(error + response.statusCode + " " + response.body); 
    } else if(response.statusCode == 201){ 
     resolve(body); //Resolves the returned object, with unqiue ID. 
    } 
    }) 
} 

function inputParser(url, objArray){ 
    var pArray = []; 
    for(var i = 0; i < objArray.length; i++){ 
    pArray.push(sendSomething(objArray[i])); 
    } 
    Promise.all(promArray).then(function(returnedValues){ //Handles the unique ID the server assigned to the object. 
    var otherArray = []; 
    for(var u = 0; u < returnedValues.length; u++){ 
     var relatedObj = { 
     "value" : Math.random() * 10, 
     "relatedTo" : returnedValues[i].identifier 
     } 
     otherArray.push(sendSomething(relatedObj)); 
    } 
    Promise.all(otherArray).then(function(values){ 
     grouper.doSomething(values); //Placeholderfunction 
    }) 
    }) 
} 
+0

Не работает, как именно? Вы знаете о синтаксических ошибках? – adeneo

+0

А, да. Синтаксические ошибки не являются проблемой, но в реальной программе (так как это проблематичный фрагмент кода) я получаю сообщение «Ошибка: ECONNHOSTUNREACH» и «неопределенный ответ». Кроме того, всякий раз, когда есть неопределенный ответ, Wireshark не показывает отправленный TCP-пакет «Syn». –

+0

Я не думаю, что это имеет какое-то отношение к узлу, скорее это что-то в вашем сетевом стеке, как брандмауэр, вызывает проблемы. Можете ли вы использовать инструмент, например cURL, для выполнения запросов POST? – robertklep

ответ

-1

Возможно, вы наводнили запросы и, следовательно, набрали таймауты для некоторых запросов.

https://www.sitepoint.com/making-http-requests-in-node-js/ может помочь.

+0

Не думаю, что это не так, если вы фактически не отправите пакет. Мой захват Wireshark не показал пакет SYN для запросов, которые были отклонены с ошибкой. –

1

Я видел, как это случалось иногда в узле с сбоем DNS, когда имеется много одновременных запросов. Ошибка обычно не является ошибкой ECONNHOSTUNREACH, но похоже, что это может быть связано с чем-то.

Включает ли ваш массив obj доменное имя вашего сервиса API? Если это так, попробуйте использовать IP вместо имени домена и посмотреть, существует ли проблема. Вы можете сделать это через что-то вроде:

require('dns').resolve4('domain.name', (err, addresses) => { 
     ip = addresses[0]; 
    } 
); 

Надеюсь, что это поможет!

+0

У меня нет времени попробовать прямо сейчас, но, поскольку щедрость вот-вот истечет и будет потрачена впустую, вы можете ее получить. :) –

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