У меня есть сервер Node.js (Express).Сервер прослушивает POST
запрос с маршрутом /enddev
.Сервер настроен на поддержание каждого соединения в течение как минимум 55 секунд.
Мой клиент отправляет POST-запросы на маршрут /enddev
каждые 10 секунд.При каждом запросе используется одно и то же соединение, поскольку время ожидания перезапускается при каждом новом запросе.
Проблема заключается в том, что клиент получает данные только по первому запросу.Каждый последующий запрос регистрируется сервером, но res.write
, кажется, не работает.
Вот некоторый код:
app.post("/enddev", (req, res) => {
console.log("REQUEST TO ", req.route.path);
console.log("Req Header ", req.headers);
console.log("Body:", req.body);
res.write("Thanks!");
});
Несколько строк вниз:
server.on("connection", socket => {
console.log(
"New connection",
"Address: " + socket.address().address,
"Port: " + socket.address().port
);
socket.setTimeout(55 * 1000);
socket.on("timeout", () => {
console.log("socket timeout");
socket.end();
});
socket.on("close", hadError => {
console.log(
hadError
? "Socket closed due to ERROR during transmission"
: "Socket closed"
);
});
});
клиент получает ответ "Спасибо!"только однажды.Вот некоторые изображения:
Клиентская консоль: (розовое: клиент, черное: сервер)
Это серверконсоль:
************* РЕДАКТИРОВАТЬ *************
Найден обходной путь, но все еще не понимаю, почему он работает только так:
var response;
app.post("/enddev", (req, res) => {
console.log("REQUEST TO ", req.route.path);
console.log("Req Header ", req.headers);
console.log("Body:", req.body);
if (typeof response === "undefined") {
response = res;
}
response.write("Hi Riko");
});
Кажется, что новые ответы, переданные в качестве аргумента res
, не являютсядопустимо или что-то в этом роде.