Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    routes-routerpublic

    routes-router

    deprecated dependency status

    Simplest request handler possible

    DEPRECATED Use http-hash-router instead

    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.params.barName)
    })
     
    router.addRoute("/foos/:fooName", function (req, res, opts, cb) {
        db.get(opts.params.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 use the parent router's 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.params.id)
    })
     
    posts.addRoute("/", function (req, res) {
      res.end("all posts")
    })
    posts.addRoute("/:id", function (req, res, opts) {
      res.end("post " + opts.params.id)
    })

    Installation

    npm install routes-router

    Contributors

    • Raynos

    MIT Licenced

    Keywords

    none

    install

    npm i routes-router

    Downloadsweekly downloads

    282

    version

    4.3.0

    license

    none

    repository

    githubgithub

    last publish

    collaborators

    • avatar