Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial

  • Loading branch information...
commit db7282130048efec7615336007116d5dabe66eea 0 parents
@dominictarr authored
Showing with 78 additions and 0 deletions.
  1. +3 −0  .gitignore
  2. +20 −0 index.js
  3. +8 −0 package.json
  4. +47 −0 readme.markdown
3  .gitignore
@@ -0,0 +1,3 @@
+node_modules
+node_modules/*
+npm_debug.log
20 index.js
@@ -0,0 +1,20 @@
+
+module.exports = function (options) {
+ options = options || {}
+ options.property = options.property || 'body'
+ options.stringify = options.stringify || JSON.stringify
+
+ return function (req, res, next) {
+ req.removeAllListeners('data')
+ req.removeAllListeners('end')
+ next()
+ process.nextTick(function () {
+ if(req[options.property]) {
+ if('function' === typeof options.modify)
+ req[options.property] = options.modify(req[options.property])
+ req.emit('data', options.stringify(req.body))
+ }
+ req.emit('end')
+ })
+ }
+}
8 package.json
@@ -0,0 +1,8 @@
+{ "name": "connect-restreamer"
+, "version": "1.0.0"
+, "description": "re-stream a parsed body so that it can be proxied."
+, "homepage": "http://github.com/dominictarr/connect-restreamer"
+, "repository":
+ { "type": "git"
+ , "url": "https://github.com/dominictarr/connect-restreamer.git" }
+, "author": "Dominic Tarr <dominic.tarr@gmail.com> (http://bit.ly/dominictarr)" }
47 readme.markdown
@@ -0,0 +1,47 @@
+#connect-restreamer
+
+connect's bodyParser has a problem when using it with a proxy. It gobbles up all the
+body events, so that the proxy doesn't see anything!
+
+`connect-restreamer` comes to the rescue by re-emitting the body to the proxy.
+
+it has defaults that make it suitable for use with connect's `bodyParser` but can be customized.
+
+## usage
+
+just include `connect-restreamer` in you're middleware chain after the bodyParser
+
+ var bodyParser = require('connect/lib/middleware/bodyParser')
+ , restreamer = require('connect-restreamer')
+
+ //don't worry about incoming contont type
+ //bodyParser.parse[''] = JSON.parse
+
+ require('http-proxy').createServer(
+ //refactor the body parser and re-streamer into a separate package
+ bodyParser(),
+ //body parser absorbs the data and end events before passing control to the next
+ // middleware. if we want to proxy it, we'll need to re-emit these events after
+ //passing control to the middleware.
+ require('connect-restreamer')(),
+ function (req,res, proxy) {
+ //custom proxy logic
+ //... see https://github.com/nodejitsu/node-http-proxy
+ }
+ ).listen(80)
+
+
+## customization
+
+restreamer takes 3 options:
+
+ var options = {
+ modify: function(body) {
+ //a function that may modify the buffered property
+ return body
+ },
+ property: 'body', //name of the buffered property
+ stringify:JSON.stringify //function to turn the buffered object back into a string
+ }
+
+ require('connect-restreamer')(options)
Please sign in to comment.
Something went wrong with that request. Please try again.