0.1.0 • Published 9 years ago

route-order v0.1.0

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

route-sort

build status

Comparator to compare URI route patterns by specificity.

Useful for Express apps, for example, to make sure more specific route patterns are matched before more generic ones.

Acutally, currently only supports Express style routes. Could be expanded.

API

Where var routeOrder = require('route-order') routeOrder accepts the following configuration options:

  • order: May be 'nonascending' or 'na' or 'nondescending' or 'nd'
  • default: If supplied, the string to determine a catchall route, i.e. route with lowest priority. Defaults to an empty string.

Behaviour

  • Deeper routes are more specific, e.g. /base/id > /base
  • If two routes have the same depth, specificity is then determined by the position of its bound parts, i.e. the position of parts which don't have a free variable like /:id. The more and the deeper the bound parts, the more specific.

Usage

// Require returns a higher order function which accepts config and
// returns a comparator function
var routeOrder = require('route-order')

var routes = [
  '/',
  '/resource/:name',
  '/resource/doggy'
]

// Sorts in nonascending order by default
routes.sort(routeOrder())
// returns ['/resource/doggy', '/resource/:name', '/']

With Express:

var express = require('express')
var specificity = require('route-order')()
var app = express()

var views = {
  '/': IndexView,
  '/resource/doggy': DoggyView,
  '/resource/:name': ResourceView
}

Object.keys(views)
    .sort(specificity)
    .forEach(function(route) {
      app.use(route, views[route])
    })

License

MIT