Skip to content

Instantly share code, notes, and snippets.

@zallek
Created November 30, 2015 16:39
Show Gist options
  • Save zallek/19305b47340480a356c8 to your computer and use it in GitHub Desktop.
Save zallek/19305b47340480a356c8 to your computer and use it in GitHub Desktop.
/**
* Created by Kartik Andalam on 9/8/15.
* Copyright (c) 2015 APIMatic. All rights reserved.
*
*/
var HttpContext = require("./HttpContext");
var HttpResponse = require("../Response/HttpResponse");
var request = require("superagent");
var APIHelper = require('../../APIHelper');
var convertHttpRequest = function (req) {
//Convert to request's version of http request
var options = {
url: req.queryUrl,
method: req.method,
headers: req.headers
};
if (req.username) {
options.auth = {user:req.username, pass:req.password};
}
if (req.body) {
options.body = req.body;
}
if (req.formData) {
options.formData = APIHelper.formDataEncodeObject(req.formData);
}
if (req.form) {
options.form = APIHelper.urlEncodeObject(req.form);
options.headers["content-type"] = 'application/x-www-form-urlencoded';
}
return options;
}
var convertHttpResponse = function (resp) {
var response = new HttpResponse();
if(resp) {
response.body = resp.body;
response.headers = resp.headers;
response.statusCode = resp.statusCode;
}
return response;
}
var methodMap = {
GET: 'get',
DELETE: 'del',
HEAD: 'head',
PATH: 'patch',
POST: 'post',
PUT: 'put'
}
request.parse['application/json'] = function(s) { return s; };
/**
* Execute a given HttpRequest to get string response back
* @param {HttpRequest | HttpBodyRequest} request The query string builder to replace the template parameters
* @param {Array} parameters The parameters to replace in the queryBuilder
*/
function executeRequest(req, callback) {
//Convert abstracted request to request's http request
var options = convertHttpRequest(req);
var context = new HttpContext();
context.request = req;
//Make a temp callback
var internalCallback = function cb(error, res) {
var response = convertHttpResponse(res);
context.response = response;
callback(error, response, context);
};
request[methodMap[options.method]](options.url)
.set(options.headers)
.send(options.body)
.end(internalCallback)
}
module.exports = executeRequest;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment