skyriver
Version:
SkyRiver Streaming Cloud server-side library for NodeJS
152 lines (123 loc) • 3.47 kB
JavaScript
;
var http = require('http'),
https = require('https')
, queryString = require('querystring')
, config = require('./config');
function Request() {
this.host = config.API_HOST;
this.port = config.API_PORT;
this.USE_HTTPS = config.USE_HTTPS;
this.apiVersion = config.const.DEFAULT_API_VERSION;
}
Request.prototype.get = function(credentials, path, data, fn) {
var reqPath = '/' + this.apiVersion + path;
if (data && Object.keys(data).length > 0) {
reqPath += '?' + queryString.stringify(data);
}
var headers = {};
var options = {
host: this.host,
port: this.port,
path: reqPath,
method: 'GET',
headers: headers
};
options.headers['Authorization'] = credentials.generateAccessToken(options, null);
var httpGet = this.USE_HTTPS ? https: http;
var req = httpGet.request(options, function(res) {
res.setEncoding('utf-8');
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
var resultObject = JSON.parse(responseString);
if (res.statusCode >= 400) {
fn(resultObject, null);
} else {
fn(null, resultObject);
}
});
});
req.on('error', function(e) {
fn(e, null);
});
req.end();
};
Request.prototype.post = function(credentials, path, data, fn) {
var dataString = JSON.stringify(data);
var headers = {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(dataString, 'utf8')
};
var options = {
host: this.host,
port: this.port,
path: '/' + this.apiVersion + path,
method: 'POST',
headers: headers
};
options.headers['Authorization'] = credentials.generateAccessToken(options, dataString);
var httpPost = this.USE_HTTPS ? https: http;
var req = httpPost.request(options, function(res) {
res.setEncoding('utf-8');
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
var resultObject = JSON.parse(responseString);
if (res.statusCode >= 400) {
fn(resultObject, null);
} else {
fn(null, resultObject);
}
});
});
req.on('error', function(e) {
fn(e, null);
});
req.write(dataString);
req.end();
};
Request.prototype.delete = function(credentials, path, fn, data) {
var dataString;
var headers = {};
if (data) {
dataString = JSON.stringify(data);
headers = {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(dataString, 'utf8')
};
}
var options = {
host: this.host,
port: this.port,
path: '/' + this.apiVersion + path,
method: 'DELETE',
headers: headers
};
options.headers['Authorization'] = credentials.generateAccessToken(options, dataString);
var httpDelete = this.USE_HTTPS ? https: http;
var req = httpDelete.request(options, function(res) {
res.setEncoding('utf-8');
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
var resultObject = responseString.length > 0 ? JSON.parse(responseString) : null;
if (res.statusCode >= 400) {
fn(resultObject, null);
} else {
fn(null, resultObject);
}
});
});
req.on('error', function(e) {
fn(e, null);
});
req.write(dataString);
req.end();
};
module.exports = Request;