Используя сервер Node.js Express, мы получаем ошибки «не могут отправляться заголовки дважды ..», если мы попытаемся отправить два ответа на один и тот же запрос. Я хочу найти лучший способ предотвратить отправку двух ответов для этого конкретного случая, но также и для других.Экспресс - предотвращение отправки двух + ответов
У меня есть простой/тестовый маршрут, который возвращает информацию о состоянии сервера, он выглядит следующим образом:
app.get('/test', function (req, res, next) {
var client = redis.createClient();
var response = {};
var alreadySentResponse = false; //I use a boolean to check if I already sent a response
client.on("error", function (err) { //this callback will invoke res.send
log.error('error in redis client test error callback:', err);
if(alreadySentResponse === false){
alreadySentResponse = true;
res.status(500).send({"test message from SmartConnect": err});
}
});
client.info(function (err, resp) { //this callback will also invoke res.send
response['redisInfo'] = resp;
if(alreadySentResponse ===false){
alreadySentResponse = true;
res.status(200).send({"test message from SmartConnect": response});
}
});
});
есть лучший способ сделать это? Может ли объект res отслеживать, был ли он уже отправлен? Кажется, что он сбой сервера, если res.send дважды вызывается и т. Д. Другая проблема, конечно, в том, что, если есть внутренняя ошибка с клиентом, если сообщение об успешности отправляется, это не значит, что я не хочу также отправить client.on («ошибка») сообщение на вершине, что ...
PS, у меня аналогичная проблема дизайна с использованием асинхронная библиотека. Если обратный вызов вызывается дважды, асинхронная библиотека также вызывает ошибки. –