viktort/node-google-prediction

View on GitHub
lib/Helper.js

Summary

Maintainability
A
1 hr
Test Coverage
var request = require('request');
var qs = require('querystring');
var util = require('util');

module.exports = Helper;

function Helper() {
}

Helper.request = function(options, cb) {

  var uri = options.uri;

  if (options.query) {
    uri += '?' + qs.stringify(options.query);
  }

  var body;
  if (options.body && options.headers && /urlencoded/.test(options.headers['Content-Type'])){
    body = qs.stringify(options.body);
  } else if( options.body && options.headers && /json/.test(options.headers['Content-Type'])) {
    body = JSON.stringify(options.body)
  }

  var reqOptions = {
    method  : options.method || 'GET',
    headers : options.headers || 'application/json',
    uri     : uri,
    body    : body
  };

  console.log('options in request =', reqOptions);
  request(reqOptions, function(err, response, body) {
    if (err) {
      console.log(err);
      return cb(err);
    }

    if(body) {
      try{
        var json = JSON.parse(body);
        cb(null, json, response);
      } catch (e) { //body may already be json
        return cb(e, body, response);
      }
    } else {
      //We got an empty response with empty body - still return Okay. Example is request to google revoke token api which return 200OK with empty body
      return cb(null, null, response);
    }
  });
}