0.2.4 • Published 9 years ago

rooter-router v0.2.4

Weekly downloads
2
License
MIT
Repository
github
Last release
9 years ago

rooter-router

This is a basic javascript router implementation. It doesn't do regex, and it is strongly biased toward specificity - routes are matched to their most specific equivalent.

It handles multiple levels of resources and dynamic segments, and can handle method-specific routes.

NOTE: If you elect to use method specific routes, you cannot also use general routes for that endpoint.

Splats: Rooter-router has a basic splats implementation. Note that splats are always treated as less specific, which has the following repercussions:

Given:

testRouter.add('/public/*', function (req, res, helper) {
      res.end(helper.routeMatched)
    })
  .add('/public/resource/:test', function (req, res, helper) {
      res.end(helper.dynamics.test)
    })

the test:

request(app)
      .get('/public/resource/foobar')
      .expect('foobar’)

passes. In addition, a less specific splat will not overrule a more specific splat. Hence:

testRouter.add('/public/*', function (req, res, helper) {
      res.end(helper.routeMatched)
    })
  .add('/public/special/*', function (req, res, helper) {
      res.end(helper.routeMatched)
    })

with a test of:

request(app)
      .get('/public/special/foo/bar/baz')
      .expect('/public/special/*’)

will also pass. Note that the route definitions above use method chaining, which is supported when adding routes.

Usage looks something like this:

var http = require('http'),
Rooter = require('rooter-router')

router = new Rooter

router.add('/foo', function(req, res, url){
    res.end('Index for ' + url.resources[0])
})
router.add('/foo/:id', function(req, res, url){
  res.end('Got an instance of a foo: ' + url.dynamics.id)
})
router.add('/foo/new', function(req, res, url){
  res.end('This must have been a get request')
},'GET')
router.add('/foo/:bar/baz', function(req, res, url){
  res.end( url.resources[0] + '/' + url.dynamics.bar + '/' + url.resources[1])
})

http.createServer(function (req, res) {
  router.handle(req, res)
}).listen(9001)

Note that the URL object available to your callback includes a standard url.parse object, in addition to elements such as:

  • resources (an array)
  • dynamics (an object, where the key name is the dynamic segment)
  • verb (method)
  • matchedRoute

However, resources and dynamics are not presently generated for splats.

Testing (jasmine) requires supertest (for testing only). Tests cover essential functions, and are visible at specs/rooterSpec.js

0.2.4

9 years ago

0.2.3

9 years ago

0.2.2

9 years ago

0.2.1

9 years ago

0.1.6

9 years ago

0.1.5

9 years ago

0.1.4

9 years ago

0.1.3

9 years ago

0.1.2

9 years ago

0.1.1

9 years ago

0.1.0

9 years ago

0.0.8

9 years ago

0.0.7

9 years ago

0.0.6

9 years ago

0.0.5

9 years ago

0.0.4

9 years ago

0.0.3

9 years ago

0.0.2

9 years ago

0.0.1

9 years ago