all files / util/ request.js

10.53% Statements 2/19
0% Branches 0/8
0% Functions 0/3
11.11% Lines 2/18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                                                                                       
/**
  Performs an asynchronous HTTP request.
 
  @param {String} method HTTP method to use for the request
  @param {String} url url to which the request is sent
  @param {Object} data json to be sent to the server
  @param {Function} cb callback that takes error and response data
 
  @example
 
  ```js
  request('GET', './data.json', null, function(err, data) {
    if (err) return cb(err);
    cb(null, data);
  });
  ```
*/
export default function request(method, url, data, cb) {
  var request = new XMLHttpRequest()
  request.open(method, url, true)
  request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8')
  request.onload = function() {
    if (request.status >= 200 && request.status < 400) {
      var res = request.responseText
      if(isJson(res)) res = JSON.parse(res)
      cb(null, res)
    } else {
      return cb(new Error('Request failed. Returned status: ' + request.status))
    }
  }
 
  if (data) {
    request.send(JSON.stringify(data))
  } else {
    request.send()
  }
}
 
function isJson(str) {
  try {
    JSON.parse(str)
  } catch (e) {
    return false
  }
  return true
}