ajax-based.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. 'use strict';
  2. var inherits = require('inherits')
  3. , urlUtils = require('../../utils/url')
  4. , SenderReceiver = require('./sender-receiver')
  5. ;
  6. var debug = function() {};
  7. if (process.env.NODE_ENV !== 'production') {
  8. debug = require('debug')('sockjs-client:ajax-based');
  9. }
  10. function createAjaxSender(AjaxObject) {
  11. return function(url, payload, callback) {
  12. debug('create ajax sender', url, payload);
  13. var opt = {};
  14. if (typeof payload === 'string') {
  15. opt.headers = {'Content-type': 'text/plain'};
  16. }
  17. var ajaxUrl = urlUtils.addPath(url, '/xhr_send');
  18. var xo = new AjaxObject('POST', ajaxUrl, payload, opt);
  19. xo.once('finish', function(status) {
  20. debug('finish', status);
  21. xo = null;
  22. if (status !== 200 && status !== 204) {
  23. return callback(new Error('http status ' + status));
  24. }
  25. callback();
  26. });
  27. return function() {
  28. debug('abort');
  29. xo.close();
  30. xo = null;
  31. var err = new Error('Aborted');
  32. err.code = 1000;
  33. callback(err);
  34. };
  35. };
  36. }
  37. function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {
  38. SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);
  39. }
  40. inherits(AjaxBasedTransport, SenderReceiver);
  41. module.exports = AjaxBasedTransport;