var server = http.createServer(function (req, res) { if (options.maintMode) { var remoteIp = addr(req); if (options.maintIps && ~options.maintIps.indexOf(remoteIp)) doProxy(); else { maintPage(req, res, 503); } } else { doProxy(); } function doProxy () { setupRequest(req, function (spec) { req._spec = spec; d.run(function () { proxy.web(req, res, { target: spec }, function httpErrorHandler (err, req, res) { onReqError(err, req, res, req._sReq, req._spec); }); }); }); } });
function setupRequest (req, cb) { req.on('error', function (err) { console.error(err, '#error'); }); var stickyId; if (opts.stickyCookie || opts.stickyIp || opts.stickyQuery) { if (opts.stickyCookie && req.headers.cookie) { stickyId = cookie.parse(req.headers.cookie)[opts.stickyCookie]; } else if (opts.stickyIp) { stickyId = addr(req); } else if (opts.stickyQuery) { var query = parseUrl(req.url, true).query; stickyId = query[opts.stickyQuery]; } } req._sReq = amino.requestService({ service: serviceSpec.service, version: req.headers['x-amino-version'] || serviceSpec.version, stickyId: req.headers['x-amino-stickyid'] || stickyId }, cb); }
exports['h'] = exports['a'] = function(req) { return addr(req, this.options.proxies); };