rewriter

0.0.11 • Public • Published

serve apps with node point javascript! uses the unreleased streaming web framework codenamed tako

all you need is a folder (or existing http server) full of static assets and a little bit o' javascripts:

var tako = require('tako')
  , http = require('http')
  , path = require('path')
  , Rewriter = require('rewriter')
  , rewrites = [ 
      { from:"/", to:'index.html' }
    ]
  ;

var t = tako()

new Rewriter(t, rewrites, { attachments: path.resolve(__dirname, 'attachments') })
// you can also do { attachments: "http://myawesomestaticfileserver.com" }

t.listen(function(handler) {
  return http.createServer(handler)
}, 9999)

rewriter was built to work easily with couchdb! you can do things like serve couchapps from node and proxy to couch:

var couch = "http://localhost:5984"
  , rewrites = [ 
      {from:"/", to:'index.html'}
    , {from:"/api/couch", to: couch + "/"}
    , {from:"/api/couch/*", to: couch + "/*"}
    , {from:"/api", to: couch + "/appdatabase"}
    , {from:"/api/*", to: couch + "/appdatabase/*"}
    , {from:"/db/:id", to: couch + "/:id/"}
    , {from:"/db/:id/*", to: couch + "/:id/*"}
    ]
  ;
  
new Rewriter(t, rewrites)

you can specify an async middleware errback function that the proxied request will be run through either singularly or using a group

the callback is in the form callback(err) and must be called for the request to continue. call with no arguments to resume normally or with an error message as the first argument to res.end() the request with that message.

var rewrites = [ 
      {from:"/awesome", to: couch + "/", before: function(req, res, cb) { console.log(req.connection.remoteAddress); cb() }}
    , {before: function(req, res, cb) { if (req.headers.referrer !== "awesome.com") cb('go away hotlinkers') }
      , rewrites: [
          {from:"/api/couch/*", to: couch + "/*"}
        , {from:"/api", to: couch + "/appdatabase"}
        , {from:"/api/*", to: couch + "/appdatabase/*"}
        , {from:"/db/:id", to: couch + "/:id/"}
        , {from:"/db/:id/*", to: couch + "/:id/*"}
        ]
      }
    ]
  ;

new Rewriter(t, rewrites)

there is also a shorthand for specifying a root url that will be used in all absolute to rewrites (ones that begin with a forward slash e.g. to: "/hello"). conversely, all relative rewrites (no forward slash at the beginning e.g. to: "hello.html") will be routed to the attachments directory

var rewrites = [ 
    {from:"/api/applications/:dataset", to:"/_view/applications", query:{endkey:":dataset", startkey:":dataset", include_docs:"true", descending: "true"}}
  , {from:"/api/applications", to:"/_view/applications", query:{include_docs:"true", descending: "true"}}
  , {from:"/api/applications/user/:user", to:"/_view/applications_by_user", query:{endkey:":user", startkey:":user", include_docs:"true", descending: "true"}}
  , {from:"/api/datasets/:user", to:"/_view/by_user", query:{endkey: [":user",null], startkey:[":user",{}], include_docs:"true", descending: "true"}}
  , {from:"/api/datasets", to:"/_view/by_date", query:{include_docs:"true", descending: "true"}}
]

new Rewriter(t, rewrites, {root: "http://localhost:5984/mydataset/_design/mydesigndocument"})

MIT License

Readme

Keywords

none

Package Sidebar

Install

npm i rewriter

Weekly Downloads

0

Version

0.0.11

License

none

Last publish

Collaborators

  • maxogden