Spaces:
Sleeping
Sleeping
/* | |
* http-stream.js: Idomatic buffered stream which pipes additional HTTP information. | |
* | |
* (C) 2011, Charlie Robbins & the Contributors | |
* MIT LICENSE | |
* | |
*/ | |
var url = require('url'), | |
util = require('util'), | |
qs = require('qs'), | |
BufferedStream = require('./buffered-stream'); | |
var HttpStream = module.exports = function (options) { | |
options = options || {}; | |
BufferedStream.call(this, options.limit); | |
if (options.buffer === false) { | |
this.buffer = false; | |
} | |
this.on('pipe', this.pipeState); | |
}; | |
util.inherits(HttpStream, BufferedStream); | |
// | |
// ### function pipeState (source) | |
// #### @source {ServerRequest|HttpStream} Source stream piping to this instance | |
// Pipes additional HTTP metadata from the `source` HTTP stream (either concrete or | |
// abstract) to this instance. e.g. url, headers, query, etc. | |
// | |
// Remark: Is there anything else we wish to pipe? | |
// | |
HttpStream.prototype.pipeState = function (source) { | |
this.headers = source.headers; | |
this.trailers = source.trailers; | |
this.method = source.method; | |
if (source.url) { | |
this.url = this.originalUrl = source.url; | |
} | |
if (source.query) { | |
this.query = source.query; | |
} | |
else if (source.url) { | |
this.query = ~source.url.indexOf('?') | |
? qs.parse(url.parse(source.url).query) | |
: {}; | |
} | |
}; | |