У меня есть код NodeJS, где, в основном, вот что происходит:
HTTP-запрос (app.get) -> Отправить запрос на сокет низкого уровня (с помощью net.Socket ()) -> Getответ от сокета -> res.send (ответ от сокета)
Это не работает, потому что net.Socket () использует асинхронные функции и события (client.on("data", callback)
).
Я пыталсячто-то вроде этого:
app.get("/", function(req, res){
client.connect("localhost", 420, function(){
client.write("example data");
});
client.on("data", function(data){
client.destroy();
res.send(data);
});
});
Но это не работает, потому что говорит, что я пересылаю заголовки (объект res не изменится, так как функция является событием, а не функцией синхронизации).
Есть идеи?Или библиотека для синхронизации запросов сокетов?Я пробовал следующее:
- Synket
- sync-socket
- netlinkwrapper
И они не работают.
Редактировать: я пытаюсь что-то вроде этого:
async function sendData(client, res){
client.on('data', function(data){
console.log("Got data!");
res.send(""+data);
res.end();
console.log("Sent data!");
client.destroy();
console.log("Killed connection");
return;
});
}
app.get("/", function(req, res){
var body = req.query;
client.connect(420, "localhost", function(){
client.write("some random data");
console.log("Connected & Data sent!");
sendData(client, res);
});
});
Это работает при первом попытке доступа к странице, но во второй раз приложение вылетает, и я получаю эту ошибку:
_http_outgoing.js:489
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.