如何覆盖javascript XHR原型以从websocket发送和接收数据

时间:2017-11-29 03:08:16

标签: javascript node.js websocket javascript-events override

我试图做一些非常奇怪/愚蠢的事情,我正在尝试为XHR请求构建一种Websocket代理。

假设您在页面上有一个组件,它不断地通过XHR(GET)请求资源,这是我想要实现的流程:

  1. 拦截XHR GET请求(已完成);
  2. 通过Websocket转发(完成);
  3. 服务器获取URL和params,调用远程端点并通过Websocket将数据返回给客户端(完成);
  4. 将Websocket收到的响应注入原始XHR GET并完成(未完成)
  5. 所以我现在的麻烦是无法使用来自Websocket的响应数据“模拟”XHR请求的完成,是否有任何可以触发的事件或方法?

    有人可以就此提出一些想法或解决方案吗? 提前谢谢。

    我目前的代码:

    XHR.prototype.open = function (method, url, async, user, pass) {
      const self = this;
    
      function getter() {
        console.log('get responseText');
        delete XHR.responseText;
        // var ret = XHR.responseText;
      }
    
      function setup() {
        Object.defineProperty(XHR, 'responseText', {
          get: getter,
          configurable: true
        });
      }
      setup();
    
      socket.emit('req', url);
      socket.on('reqr', data => {
        var event = new Event('loadend');
        setup();
        self.dispatchEvent(event, data);
        // return data;
      });
      // this._url = url;
      // open.call(this, method, url, async, user, pass);
    }
    

0 个答案:

没有答案