Package Exports
- routes-router
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (routes-router) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
routes-router
Simplest router possible
Example
var Router = require("routes-router")
var http = require("http")
var router = Router()
http.createServer(router)
router.addRoute("/foo", function (req, res) {
res.end("hello!")
})
router.addRoute("/bars/:barName", function (req, res, opts) {
res.end("you request bars " + opts.barName)
})
router.addRoute("/foos/:fooName", function (req, res, opts, cb) {
db.get(opts.fooName, function (err, value) {
if (err) return cb(err)
res.end(JSON.stringify(value))
})
})
router.addRoute("/baz/:things", {
GET: function (req, res) {
res.end("I will give you your thing")
},
POST: function (req, res) {
res.end("got your things")
}
})
Error handling with a router
You can use a router to do central error handling
var Router = require("routes-router")
var sendError = require("send-data/error")
var uuid = require("uuid")
var router = Router({
errorHandler: function (req, res, err) {
err.id = uuid()
// log it somewhere
logError(req, res, err)
// if req is json
if (isJson(req)) {
sendError(req, res, err)
} else {
// render HTML 500 page
renderErrorPage(req, res, err)
}
},
teardown: function (req, res, err) {
// an unexcepted exception occured
// process is in corrupted state
// you have to shut it down
// see node domains docs
},
notFound: function (req, res) {
// render a custom 404 page
renderNotfoundPage(req, res)
}
})
Cascading errors in a tree of routers
Since a Router
just returns a function (req, res) {}
you can
add routers to a router
Here we can just embed a Router
instance in another router
instance. A child router will the parents routers callback
so all error handling is managed in the parent, not the child.
This means you can define your error handling in your parent and all children will re-use that error handling logic.
Note that we use the .prefix()
instead of .addRoute()
method to add child routers. The .prefix()
ensures that
both /user
, /user/
and /user/*?
goes to the child router.
var Router = require("routes-router")
var app = Router({
errorHandler: function (req, res) {
res.statusCode = 500
res.end("no u")
},
notFound: function (req, res) {
res.statusCode = 404
res.end("oh noes")
}
})
var users = Router()
var posts = Router()
app.prefix("/user", users)
app.prefix("/post", posts)
users.addRoute("/", function (req, res) {
res.end("all users")
})
users.addRoute("/:id", function (req, res, opts) {
res.end("user " + opts.id)
})
posts.addRoute("/", function (req, res) {
res.end("all posts")
})
posts.addRoute("/:id", function (req, res, opts) {
res.end("post " + opts.id)
})
Installation
npm install routes-router
Contributors
- Raynos