72 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var EventEmitter = require('events').EventEmitter
 | |
|   , inherits = require('inherits')
 | |
|   , http = require('http')
 | |
|   , https = require('https')
 | |
|   , URL = require('url-parse')
 | |
|   ;
 | |
| 
 | |
| var debug = function() {};
 | |
| if (process.env.NODE_ENV !== 'production') {
 | |
|   debug = require('debug')('sockjs-client:driver:xhr');
 | |
| }
 | |
| 
 | |
| function XhrDriver(method, url, payload, opts) {
 | |
|   debug(method, url, payload);
 | |
|   var self = this;
 | |
|   EventEmitter.call(this);
 | |
| 
 | |
|   var parsedUrl = new URL(url);
 | |
|   var options = {
 | |
|     method: method
 | |
|   , hostname: parsedUrl.hostname.replace(/\[|\]/g, '')
 | |
|   , port: parsedUrl.port
 | |
|   , path: parsedUrl.pathname + (parsedUrl.query || '')
 | |
|   , headers: opts && opts.headers
 | |
|   };
 | |
| 
 | |
|   var protocol = parsedUrl.protocol === 'https:' ? https : http;
 | |
|   this.req = protocol.request(options, function(res) {
 | |
|     res.setEncoding('utf8');
 | |
|     var responseText = '';
 | |
| 
 | |
|     res.on('data', function(chunk) {
 | |
|       debug('data', chunk);
 | |
|       responseText += chunk;
 | |
|       self.emit('chunk', 200, responseText);
 | |
|     });
 | |
|     res.once('end', function() {
 | |
|       debug('end');
 | |
|       self.emit('finish', res.statusCode, responseText);
 | |
|       self.req = null;
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   this.req.on('error', function(e) {
 | |
|     debug('error', e);
 | |
|     self.emit('finish', 0, e.message);
 | |
|   });
 | |
| 
 | |
|   if (payload) {
 | |
|     this.req.write(payload);
 | |
|   }
 | |
|   this.req.end();
 | |
| }
 | |
| 
 | |
| inherits(XhrDriver, EventEmitter);
 | |
| 
 | |
| XhrDriver.prototype.close = function() {
 | |
|   debug('close');
 | |
|   this.removeAllListeners();
 | |
|   if (this.req) {
 | |
|     this.req.abort();
 | |
|     this.req = null;
 | |
|   }
 | |
| };
 | |
| 
 | |
| XhrDriver.enabled = true;
 | |
| XhrDriver.supportsCORS = true;
 | |
| 
 | |
| module.exports = XhrDriver;
 | 
