123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- `use strict`
- const http = require('http');
- const https = require('https');
- const url = require('url');
- function getProtocol(path) {
- return url.parse(path).protocol === "http:" ? http : https;
- }
- /**
- * Send a get request
- * @param path is the url endpoint
- * @param headers of the request
- * @param callback contains (error, body, status, headers)
- */
- function get(path, headers, callback) {
- request(path, "GET", null, headers, callback);
- }
- /**
- * Send a post request
- * @param path is the url endpoint
- * @param headers of the request
- * @param callback contains (error, body, status, headers)
- * @param data a JSON Object or a string
- */
- function post(path, data, headers, callback) {
- request(path, "POST", data, headers, callback);
- }
- /**
- * Send a custom request
- * @param path is the url endpoint
- * @param headers of the request
- * @param callback contains (error, statusCode, data)
- * @param data a JSON Object or a string
- * @param method is the protocol used like POST GET DELETE PUT etc...
- */
- function request(path, method, data, headers = '', callback) {
- if (typeof data === 'function') {
- callback = data;
- data = '';
- } else if (typeof headers === 'function') {
- callback = headers;
- headers = {};
- }
- const postData = typeof data === "object" ? JSON.stringify(data) : data;
- const parsedUrl = url.parse(path);
- const options = {
- hostname: parsedUrl.hostname,
- port: parsedUrl.port,
- path: parsedUrl.pathname + (!!parsedUrl.search ? parsedUrl.search : ''),
- method: method,
- headers: headers
- };
- const req = getProtocol(path).request(options, function (response) {
- handleResponse(response, callback);
- });
- req.on('error', function (error) {
- callback(error);
- console.error(error);
- });
- // Write data to request body
- if (method !== "GET")
- req.write(postData);
- req.end();
- }
- function handleResponse(response, callback) {
- let body = '';
- const status = response.statusCode;
- const hasError = status >= 300;
- response.setEncoding('utf8');
- response.on('data', function (data) {
- body += data;
- });
- response.on('end', function () {
- callback(hasError ? body : null, hasError ? null : body, response.statusCode, response.headers);
- });
- }
- module.exports = {
- get,
- request,
- post
- };
|