You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
870 B
JavaScript

'use strict'
var url = require('url')
var RouteNode = require('./route-node')
var utils = require('./utils')
var assign = utils.assign
var noop = utils.noop
function Router(options) {
options = options || {}
this.routes = new RouteNode()
}
assign(Router.prototype, {
add: function add(path, handler) {
return this.routes.add(this._uriToParts(path), handler)
},
route: function route(path, done) {
var parts = this._uriToParts(path)
done = done || noop
return this.routes.get(parts, [], function (err, func, context, args) {
if (err) {
return done(err)
} else {
return done(null, func.apply(context, args))
}
})
},
_uriToParts: function _uriToParts(uri) {
return url.parse(uri)
.pathname
.split('/')
.filter(function (str) { return str !== ''})
}
})
module.exports = Router