Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

streaming http + file routing proxy. serve apps with node point javascript!

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 node_modules
Octocat-spinner-32 test
Octocat-spinner-32 README.md
Octocat-spinner-32 defaults.js
Octocat-spinner-32 index.js
Octocat-spinner-32 package.json
README.md

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

Something went wrong with that request. Please try again.