github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/themes/wind/static/libs/sockjs-client-1.1.0/lib/transport/driver/xhr.js (about) 1 'use strict'; 2 3 var EventEmitter = require('events').EventEmitter 4 , inherits = require('inherits') 5 , http = require('http') 6 , https = require('https') 7 , URL = require('url-parse') 8 ; 9 10 var debug = function() {}; 11 if (process.env.NODE_ENV !== 'production') { 12 debug = require('debug')('sockjs-client:driver:xhr'); 13 } 14 15 function XhrDriver(method, url, payload, opts) { 16 debug(method, url, payload); 17 var self = this; 18 EventEmitter.call(this); 19 20 var parsedUrl = new URL(url); 21 var options = { 22 method: method 23 , hostname: parsedUrl.hostname.replace(/\[|\]/g, '') 24 , port: parsedUrl.port 25 , path: parsedUrl.pathname + (parsedUrl.query || '') 26 , headers: opts && opts.headers 27 , agent: false 28 }; 29 30 var protocol = parsedUrl.protocol === 'https:' ? https : http; 31 this.req = protocol.request(options, function(res) { 32 res.setEncoding('utf8'); 33 var responseText = ''; 34 35 res.on('data', function(chunk) { 36 debug('data', chunk); 37 responseText += chunk; 38 self.emit('chunk', 200, responseText); 39 }); 40 res.once('end', function() { 41 debug('end'); 42 self.emit('finish', res.statusCode, responseText); 43 self.req = null; 44 }); 45 }); 46 47 this.req.on('error', function(e) { 48 debug('error', e); 49 self.emit('finish', 0, e.message); 50 }); 51 52 if (payload) { 53 this.req.write(payload); 54 } 55 this.req.end(); 56 } 57 58 inherits(XhrDriver, EventEmitter); 59 60 XhrDriver.prototype.close = function() { 61 debug('close'); 62 this.removeAllListeners(); 63 if (this.req) { 64 this.req.abort(); 65 this.req = null; 66 } 67 }; 68 69 XhrDriver.enabled = true; 70 XhrDriver.supportsCORS = true; 71 72 module.exports = XhrDriver;