【问题标题】:How can I fetch data from socket.io client for node POST request如何从 socket.io 客户端获取节点 POST 请求的数据
【发布时间】:2014-07-22 15:34:49
【问题描述】:

我正在开发一个 node.js 应用程序,该应用程序尝试从 socket.io 客户端获取数据以填充对来自另一个客户端的 POST 请求的响应。比如……

  1. 来自客户端 A 的 POST http 请求
  2. 服务器通过 socket.io 从客户端 B 请求数据
  3. 客户端 B 通过套接字向服务器返回数据
  4. 服务器响应客户端A

发出初始 POST 请求的客户端 A 是一个 Web 服务 (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 没有等待客户端的响应就返回了。

谁能帮助我重新考虑这个以等待套接字响应?

谢谢!

【问题讨论】:

    标签: javascript node.js websocket socket.io plivo


    【解决方案1】:

    你需要在socket响应回调中结束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 );
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2019-09-06
      • 2023-02-23
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多