У меня возникла спорадическая проблема с моим сервером Node/loopback. Моя настройка такова:Ошибка Node.js sporadic «ECONNREFUSED» на request.get
EDIT: Моя версия узла v4.2.4, я запускаю узел в Windows 10 Professional.
стороне клиента:
nw.js клиент, который проходит через локальную файловую систему и вычисляет значение MD5 файлов.
Использование
request.post
, клиент посылает хэш файла на сервер в формате'fileHash: d41d8cd98f00b204e9800998ecf8427e'
(это просто пример, хэш, я знаю, что это пустой файл)function checkHash (fileHash){ request.post({ headers: {'content-type' : 'application/x-www-form-urlencoded'}, url: 'http://localhost:3000/api/checkBoths/hashcheck', method: 'POST', form: { fileHash: fileHash } }, function(error, response, body){ if(error) { console.log(error); } else { console.log(response.statusCode, body); } }); }
сервера сторона:
сервер/петлевой узел работает на
localhost:3000
.Функция
hashCheck
предназначена для считывания данных, отправленных клиентом, и запроса базы данных MySQL, которая соответствует совпадению хэша.Ответ от сервера будет в формате
goodResult : true
, если хэш существует в базе данных илиgoodResult : false
, если нет.var request = require('request'); module.exports = function (CheckBoth) { var goodResult; CheckBoth.hashCheck = function (fileHash, cb) { requestGood(fileHash); function requestGood (fileHash) { request.get('http://127.0.0.1:3000/api/Goodhashes/' + fileHash + '/exists', function (error, response, body) { if (!error && response.statusCode == 200) { goodResult = JSON.parse(body).exists; } if (error) { console.error(error); } }); console.log(goodResult); } cb(goodResult); }; CheckBoth.remoteMethod( 'hashCheck', { accepts: {arg: 'fileHash', type: 'string'}, returns: [{arg: 'goodResult', type: 'string'}] } ); };
Выпуск:
Сервер может ответить ~ 1000 запросов до следующих появляется в ответах:
{ [Error: connect ECONNREFUSED 127.0.0.1:3000]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 3000 }
Я попытался положить в различных обратных вызовов в пределах код сервера, но это не имеет никакого значения. Я думаю, что я, вероятно, должен задушить запросы на сервер, но я не знаю, как этого добиться.
Любая помощь была бы принята с благодарностью.
В какой версии узла вы работаете? – migg
@migg Я бегу v4.2.4 – Oddball
Хмм ...ваш параметр называется 'callback', но вы вызываете' cb'. Может быть, вы создаете memleak, пока сервер не откажется от соединений? – migg