export default function ConfigureRouter(paths) { let router = new Routes(); for (let pk in paths) { if (!paths.hasOwnProperty(pk)) continue; let path = paths[pk]; let route = correctPath(pk); for (let mk in path) { if (!path.hasOwnProperty(mk)) continue; let method = path[mk]; if (process.env.debug) { console.log('ADDING ROUTE: ', mk.toUpperCase() + ' ' + pk); } let respond = generateResponse(method.responses, pk); router.addRoute('/' + mk + route, respond); } } return router; }
launchServer: function(siteID,body){ //router.addRoute('/emediate/EAS_fif.html', t.EAS_fif); //emulate eas file, so banners works router.addRoute('/shell/:site/:lang/:banner', t.checkShell); //accept shortcode and country + router.addRoute('/*', t.welcome); //all other urls display default list var port = process.env.PORT || 3500; var ip = process.env.HOST || 'localhost'; //Change to specific IP if you need to test on mobile devices http.createServer(function (req, res) { var path = url.parse(req.url).pathname; var match = router.match(path); match.fn(req, res, match); }).listen(port); console.log(`Server running on http://${ip}:${port}/`); //open('http://' + ip + ':' + port + '/'); },
/**** Initialize a new PhantInput ****/ function PhantInput(config) { // create a responder var responder = function(req, res) { if (!req.url.match(/^\/input\//)) { return; } if (res.headersSent) { return; } res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET,POST,DELETE'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, Phant-Private-Key'); var match = router.match(url.parse(req.url).pathname); if (!match) { return; } match.fn(req, res, match); return responder; }; util._extend(responder, events.EventEmitter.prototype); util._extend(responder, app); util._extend(responder, config || {}); router.addRoute('/input/:publicKey/clear.:ext', responder.route.bind(responder, 'clear')); router.addRoute('/input/:publicKey/clear', responder.route.bind(responder, 'clear')); router.addRoute('/input/:publicKey.:ext', responder.route.bind(responder, 'log')); router.addRoute('/input/:publicKey', responder.route.bind(responder, 'log')); return responder; }
module.exports = function (config) { config = config || {}; var prefix = config.prefix || "perf-"; var router = new Routes(); var analyzer = new Analyzer(config); router.addRoute('/' + prefix + 'profile', function (req, res) { if (req.method === "GET") { var result = analyzer.getProfile(); if (!result) sendJSON(req, res, { body: {error: "no profile yet"}, statusCode: 404 }); else sendJSON(req, res, result); } else if (req.method === "POST") { jsonBodyHack(req, function (err, data) { if (err) return console.error(util.inspect(err)); var result = analyzer.startProfiling(data.time); if (result && result.type === Analyzer.ProfilingStartedError.type) return sendJSON(res, { body: {error: "profiling already started"}, statusCode: 406 }); return sendJSON(req, res, {message: "started profiling"}); }); } else return sendJSON(req, res, {statusCode: 405}); }); router.addRoute('/' + prefix + 'heap', function (req, res, next) { if (req.method === "GET") { var path = analyzer.heapDump(); sendJSON(req, res, {path: path}); } else return sendJSON(req, res, {statusCode: 405}); }); function handler (req, res, opts, next) { var route = router.match(req.url); if (!route) next(NotFoundError()); else route.fn.call(null, req, res); } var server = http.createServer(function (req, res) { handler(req, res, {}, function (err) { if (err && err.type === NotFoundError.type) sendJSON(req, res, {body: {error: "not found"}, statusCode: 404}); else if (err) sendJSON(req, res, {body: {error: "unknown error"}, statusCode: 500}); }); }); server.router = router; server.handler = handler; return server; };