can-route

A simple regexp router that returns false when it can’t handle a request.

can-route

can-route is a simple router that returns false when it can’t handle a request. Its routes are defined with named regular expressions.

npm install can-route
var http = require('http')
var can = require('can-route')()
 
// Home 
can.get(/^\/$/,
  function(reqres) {
    res.end('Welcome to the homepage\n')
  }
)
 
// Item 
can.patch(/^\/(:<id>[a-f0-9]{16})\/?$/i,
  function(reqresparams) {
    res.end(params.id + '\n')
  }
)
 
http.createServer(function(reqres) {
  // No route has not been registered for 
  // this URI + HTTP method. 
  if (!can.route(req, res)) { 
 
    // A route *has* been registered for this 
    // URI, but not for this HTTP method. 
    if (can.match(req, res)) {
      res.statusCode = 405
      res.end()
      return
    }
 
    res.statusCode = 404
    res.end()
  }
}).listen(8080)

can-route also works in the browser with basically the same API:

var can = require('can-route')()
 
can.get(/^\/$/, function() {
  // No arguments for routes without parameters. 
})
 
can.get(/^\/(:<name>[a-z]+)\/?$/i, function(params) {
  // The only possible argument is the param object. 
})
 
can.get(/#\/(:<name>[a-z]+)\/$/i, function(params) {
  // It's possible to define routes based on 
  // the value of location.hash. 
})
 
window.onpopstate = function() {
  var path = window.location || '/path/to/page'
  if (!can.route(path)) {
    // Handle 404 
  }
}
 
window.onhashchange = function() {
  var includeQueryAndHash = true
  if (!can.route(window.location, includeQueryAndHash)) {
    // Handle 404 
  }
}

MIT