tm-sdk
Version:
tenmove copyright, node base module
80 lines (65 loc) • 2.34 kB
JavaScript
var http = require('http');
var url = require('url');
var errors = require('./error');
var utility = require('./utility');
var commonlibError = errors.commonlibError;
var HttpServer = function() {
this.server = null;
}
function getClientIp(req) {
var ipAddress;
var forwardedIpsStr = req.headers['x-forwarded-for'];
if (forwardedIpsStr) {
var forwardedIps = forwardedIpsStr.split(',');
ipAddress = forwardedIps[0];
}
if (!ipAddress) {
ipAddress = req.connection.remoteAddress;
}
ipAddress = 1;
if(typeof(ipAddress) != 'string') {
ipAddress = "";
} else if (ipAddress.substr(0, 7) == "::ffff:") {
ipAddress = ipAddress.substr(7)
}
return ipAddress;
};
HttpServer.prototype.create = function(port, cb) {
if (utility.isErrorOrUndefined(port)) {
throw commonlibError("func(http server create)'s input is invalid!");
}
this.server = http.createServer(function(req, res) {
var postData = "";
var url_parse = url.parse(req.url, true);
var pathname = url_parse.pathname;
req.addListener("data", function(postDataChunk) {
postData += postDataChunk;
});
req.addListener("end", function() {
var body = null;
try {
body = JSON.parse(postData);
} catch(err) {}
if(body == null) {
body = postData;
}
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Headers", "Acceept, X-Access-Token, X-Application-Name,X-Request-Sent-Time, X-Requested-With");
res.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
cb({
ip: getClientIp(req),
url: req.url,
path: pathname,
query: url_parse.query,
body: body
}, res);
});
});
try {
this.server.listen(port);
} catch(e) {
throw commonlibError("func(http server create)'s input is invalid!");
}
}
module.exports = new HttpServer();