rapnc
Version:
Node client for RAP 1.0
95 lines (82 loc) • 2.05 kB
JavaScript
var querystring = require('querystring');
var http = require('http');
function toQueryString(obj, prefix) {
var params = '';
prefix = prefix || '';
if (!obj) {
return params;
}
for(var prop in obj) {
params += '&' + prefix + prop + '=' + obj[prop];
}
return clean(params);
}
function clean(param) {
if (!param) {
return '';
}
param = param.replace(/^&+/, '');
param = param.replace(/&{2,}/g, '');
return param;
}
function appendToUrl(url, params) {
if (!params) {
return url;
}
url += (url.indexOf('?') != -1 ? '&' : '?') + clean(params);
return url;
}
/*
var DEFAULT_OPTIONS = {
method: 'get',
body: null,
host: 'localhost',
port: '80'
};
*/
function ajax(options, callback) {
options.method = options.method || 'get';
options.host = options.host || 'localhost';
options.port = options.port || 80;
var postData = options.body;
var method = options.method.toLowerCase();
var content = null;
if (method == 'post') {
content = querystring.stringify(postData);
}
var reqOptions = {
host: options.host,
port: options.port,
path: appendToUrl(options.path, options.params),
method: method,
agent: false
};
if (method == 'post') {
reqOptions.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': content.length
};
}
var req = http.request(reqOptions, function(res) {
res.setEncoding('utf8');
var data = '';
res.on('data', function(chunk){
data += chunk;
});
res.on('end', function(){
callback(null, data)
});
});
req.on('error', function (err) {
callback(err);
})
if (method == 'post') {
req.write(content);
}
req.end();
}
module.exports = {
ajax: ajax,
toQueryString: toQueryString,
appendToUrl: appendToUrl
}