Как я могу получить данные из клиента socket.io для запроса POST узла

Я работаю над приложением node.js, которое пытается извлечь данные из клиента socket.io, чтобы заполнить ответ на запрос POST от другого клиента. Что-то вроде...

  1. HTTP-запрос POST от клиента A
  2. сервер запрашивает данные через socket.io от клиента B
  3. клиент B возвращает данные через сокет на сервер
  4. сервер отвечает клиенту А

Клиент 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 );

}

Другие вопросы по тегам