Люди добрые, поясните, может я под конец рабочего дня и недели не замечаю какой-нибудь косяк в своем коде. Пишу небольшое приложение на ноде, для удобства пишу на CoffeeScript. В приложении нужно опрашивать некие сервера по HTTP. Данные о серверах хранятся в виде списка JSON объектов. Пробегаю по ним циклом и делаю для каждого запрос и вешаю колбек на ответ, в колбеке использую переменную m, чтоб обновить данные у себя, относительно этого конкретного монитора.
Для запросов использую модуль Request. Код ниже, вроде все ок, вставил дебаг, так как наблюдались ошибки в работе. Вывожу в консоль для каких мониторов делаем запрос, и соответственно вывожу в колбеке, когда ответ получил, чтоб удостовериться, что ото всех мы данные забрали.
sync: (monitors) ->
for m in monitors
console.log "Sending sync request to monitor: #{JSON.stringify(m)}"
request.post({
url: "http://#{m.host}:#{m.port}",
form: {
request_id: 2
}
}, (err, response, body) =>
if err?
console.log "Monitor sync error: #{err.message}"
return 0
console.log "Response from monitor #{JSON.stringify(m)}"
data = JSON.parse(body)
urls = JSON.parse(@crypto_helper.decrypt(data.data))
@alert_urls(m, urls)
)
Но дебаг говорит несуразную вещь:
Sending sync request to monitor: {"monitor_id":1,"host":"z.zzz.zzz.zzz","port":YYYY,"name":"Local Monitor"}
Sending sync request to monitor: {"monitor_id":2,"host":"xxx.xxx.xxx.x","port":YYYY,"name":"Remote Monitor"}
Response from monitor {"monitor_id":2,"host":"xxx.xxx.xxx.xxx","port":YYYY,"name":"Remote Monitor"}
Response from monitor {"monitor_id":2,"host":"xxx.xxx.xxx.xxx","port":YYYY,"name":"Remote Monitor"}
Запросы делали для обоих серверов, а ответ получили от одного дважды. Такое ощущение, что в колбек для первого сервера, как-то попал m содержащий информацию о втором сервере, потому, что данные в теле ответа разные, но как так произошло?