JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1377
  • Score
    100M100P100Q103613F

Simplest router possible

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

dependency status

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 use a ChildRouter for the sub routes. The specifics of a child router is that they have different default error handlers and not found handlers. Their defaults will delegate up the error to the parent router so you can define all error handling globally

var Router = require("routes-router")
var ChildRouter = require("routes-router/child")

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 = ChildRouter({ prefix: "/user" })
var posts = ChildRouter({ prefix: "/post" })

app.addRoute("/user*?", users)
app.addRoute("/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

MIT Licenced