diff --git a/lib/router.js b/lib/router.js new file mode 100755 index 000000000..773b762e1 --- /dev/null +++ b/lib/router.js @@ -0,0 +1,127 @@ +// Load modules + +var Route = require('./route'); +var Utils = require('./utils'); + + +// Declare internals + +var internals = {}; + + +module.exports = internals.Router = function (server) { + + this.server = server; + this.table = {}; // Array per HTTP method, including * for catch-all + + this.notfound = new Route({ + method: 'notfound', + path: '/{p*}', + config: { + auth: { mode: 'none' }, // In case defaults are set otherwise + handler: 'notFound' + } + }, server); + + if (server.settings.cors) { + this.cors = new Route({ + path: '/{p*}', + method: 'options', + config: { + auth: { mode: 'none' }, // In case defaults are set otherwise + handler: function (request) { + + request.reply({}); + } + } + }, server); + } +}; + + +internals.Router.prototype.route = function (request) { + + // Lookup route + + var method = (request.method === 'head' ? 'get' : request.method); + + var routes = this.table[method] || []; + for (var i = 0, il = routes.length; i