commuter
v2.0.1
Published
A minimal, composable router that supports sub-routes.
Downloads
339
Readme
commuter
A minimal, composable router that supports sub-routes.
Example
var commuter = require('commuter')
var router = commuter()
router.get('/post/:title', onRoute)
//later, a GET request is made with the url '/post/some-title'
router(req, res)
function onRoute(req, res) {
console.log(req.params.title) // 'some-title'
// handle route...
}
Subroutes work exactly as you'd expect:
var commuter = require('commuter')
var router = commuter()
var subrouter = commuter()
router.get('/post/*', subrouter)
subrouter.get('^/?view/:title', onRoute) // optionally leading slash
// later, a GET request with url '/post/view/some-title'
router(req, res)
function onRoute(req, res) {
console.log(req.params.title) // 'some-title'
console.log(req.url) // '/post/view/some-title'
// handle route...
}
Even handle the "index" route in your subrouter:
var commuter = require('commuter')
var router = commuter()
var subrouter = commuter()
router.get('/post/*', subrouter)
subrouter.get('^$', onRoute) // optionally leading slash
// later, a GET request with url '/post/'
router(req, res)
function onRoute(req, res) {
console.log(req.url) // '/post/'
// handle route...
}
API
commuter([defaultRoute] [, root] [, verbs])
- Create a new router. Accepts the following parameters:defaultRoute
- A function to be called if no routes are matchedroot
- A string to be ignored at the begging of any URL; for example, passing/some/string
will cause the route/some/string/with/more
to be matched using only/with/more
verbs
- By default, the standard HTTP verbs are supported: get, post, put, patch, delete. If you need different verbs, pass them here. It will replace the defaults, excepting the special any route, which is always available.
The router
that is returned has the following methods:
router(request [, args ...])
- Route arequest
through the router. Routes are matched in the order they were added.request
- An http.IncomingMessage, as passed by an http.Server or similar.args
- Any number of arguments which will be passed to the matched function.
router.<method>(pattern, fn)
- Define a route on your router<method>
- Any of the standard HTTP verbs, or the verbs you defined; for example,router.get
,router.post
, orrouter.any
.pattern
- A string that is either a Cucumber-style pattern describing a URL or a Regex string (not a RegEx object). commuter uses routes for it's pattern matching, and follows those docs and rules.fn
- The function to be called when your route is matched. This function should take the same form as yourrouter.<method>
function; that is, if your router was called asrouter(req, res)
, your function will be called withfn(req, res)
The request
object only needs to be "request-like"; that is, the only
properties that are used are request.url
to match the url, and optionally
request.method
, which will default to the router.any
routes if missing.
As the request
passes through the router, a few additional properties are
added to it:
request.params
- A key/value object of the matched parameters from your pattern, and their captures values.request.splats
- An array of the matched splatsrequest.route
- The last routepattern
that was matched.
There are a few other additions that come via routes and are explained in their docs.
License
MIT. See LICENSE for details.