server-router
Version:
56 lines (48 loc) • 1.77 kB
JavaScript
var pathname = require('pathname-match')
var urlencode = require('urlencode')
var wayfarer = require('wayfarer')
var assert = require('assert')
module.exports = ServerRouter
function ServerRouter (opts) {
if (!(this instanceof ServerRouter)) return new ServerRouter(opts)
opts = opts || {}
assert.strictEqual(typeof opts, 'object', 'server-router: opts should be type object')
this._router = wayfarer(opts.default)
this._default = opts.default
}
ServerRouter.prototype.route = function (method, route, handler) {
assert.ok(typeof method === 'string' || Array.isArray(method), 'server-router.route: method should be type string or array')
assert.strictEqual(typeof route, 'string', 'server-router.route: route should be type string')
assert.strictEqual(typeof handler, 'function', 'server-router.route: handler should be type function')
if (Array.isArray(method)) {
var methodRoute = null
for (var i = 0; i < method.length; i++) {
methodRoute = method[i].toUpperCase() + '/' + route.replace(/^[#/]/, '')
this._router.on(methodRoute, function (params, req, res) {
handler(req, res, params)
})
}
return
}
if (this._default === route) {
this._router.on(route, function (params, req, res) {
handler(req, res, params)
})
return
}
route = method.toUpperCase() + '/' + route.replace(/^[#/]/, '')
this._router.on(route, function (params, req, res) {
handler(req, res, params)
})
}
ServerRouter.prototype.match = function (req, res) {
var uri = urlencode.decode(pathname(req.url)) || '/'
uri = req.method + uri
return this._router(uri, req, res)
}
ServerRouter.prototype.start = function () {
var self = this
return function (req, res) {
self.match(req, res)
}
}