Как я могу получить данные из клиента socket.io для запроса POST узла
Я работаю над приложением node.js, которое пытается извлечь данные из клиента socket.io, чтобы заполнить ответ на запрос POST от другого клиента. Что-то вроде...
- HTTP-запрос POST от клиента A
- сервер запрашивает данные через socket.io от клиента B
- клиент B возвращает данные через сокет на сервер
- сервер отвечает клиенту А
Клиент A, делающий начальный запрос POST, является веб-службой (Plivo/plivo-node), поэтому я не могу изменить способ его подключения к серверу.
Код узла, который вызывается по запросу POST, выглядит следующим образом...
app.handlePlivoRequest = function (req, res) {
// create Plivo response object
var r = plivo.Response();
// set listener for client response
client.socket.on('callResponse', function(msg){
// add msg data from client to the Plivo response
r.addSpeak(msg);
});
// forward request to socket client
client.socket.emit('call', req.body );
// render response as XML for Plivo
return r.toXML();
}
Проблема у меня заключается в том, что handlePlivoRequest возвращается без ожидания ответа от клиента.
Может кто-нибудь помочь с тем, как я рефакторинг это, чтобы дождаться ответа сокета?
Спасибо!
1 ответ
Вам нужно завершить запрос http внутри ответного вызова сокета:
app.handlePlivoRequest = function (req, res) {
// create Plivo response object
var r = plivo.Response();
// set listener for client response
client.socket.on('callResponse', function(msg){
// add msg data from client to the Plivo response
r.addSpeak(msg);
// render response as XML for Plivo
res.set({ 'Content-Type' : 'text/xml'});
res.end(r.toXML());
});
// forward request to socket client and wait for a response..
client.socket.emit('call', req.body );
}