Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 23 additions & 3 deletions lib/requestify.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ var http = require('http'),
cache = require('./cache'),
https = require('https'),
logger = require('./logger'),
/*content-types that requires buffer encoding*/
BUFFER_RESPONSE_TYPES = ['gzip', 'deflate'],
redisTransporter = require('./cache-transporters/redis-transporter');

var Requestify = (function() {
Expand Down Expand Up @@ -69,6 +71,14 @@ var Requestify = (function() {
});
}

/**
* Based on response content type, returns true if Buffered response is needed
* @param {ttp.ServerResponse} res
**/
function isBufferResponse(res){
return BUFFER_RESPONSE_TYPES.indexOf(res.headers['content-encoding']) !== -1;
}

/**
* Executes the given request object.
* @param {Request} request
Expand Down Expand Up @@ -97,12 +107,22 @@ var Requestify = (function() {
clearTimeout(timeout);
var response = new Response(res.statusCode, res.headers);

res.setEncoding(responseEncoding);

if(!isBufferResponse(res)){
res.setEncoding(responseEncoding);
}

res.on('data', function(chunk) {
response.setChunk(chunk);
if(isBufferResponse(res)){
response.setResponseChunks(chunk);
}
response.setChunk(chunk);
});

res.on('end', function() {
if(isBufferResponse(res)){
response.finalizeBuffer();
}
if (isSuccessful(response.code)) {
storeCache(request.getFullUrl(), response.getCode(), response.getHeaders(), response.body, request.cache);
defer.resolve(response);
Expand Down Expand Up @@ -187,7 +207,7 @@ var Requestify = (function() {
* @returns {string|Requestify}
*/
responseEncoding: function(value) {
if (!value) {
if (value === undefined) {
return responseEncoding;
}

Expand Down
27 changes: 25 additions & 2 deletions lib/response.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ var url = require('url'),
* @constructor
*/
function Response(code, headers, body) {
this.responseChunks = [];
this.code = code;
this.headers = headers;
this.body = body || '';
this.bufferedResponse;
}

/**
Expand All @@ -25,16 +27,37 @@ function Response(code, headers, body) {
*/
Response.prototype.setChunk = function(chunk) {
this.body += chunk;
return this;
};

/**
* Sets one response body chunk to the response body
* @param {buffer} chunk
* @returns {Response}
*/
Response.prototype.setResponseChunks = function(chunk) {
this.responseChunks.push(chunk);
return this;
};

/**
*
*/
Response.prototype.finalizeBuffer = function(chunk) {
//console.log('totalBufLength:' + totalBufLength);
//console.dir(responseChunks);
this.bufferedResponse = Buffer.concat(this.responseChunks);
return this;
};


/**
* Returns the decoded || raw string of the request
* @returns {string|object}
*/
Response.prototype.getBody = function() {
var responseType = this.getHeader('content-type');
var responseType = this.getHeader('content-type'),
zlib;

if (!responseType) {
return this.body;
Expand All @@ -47,7 +70,7 @@ Response.prototype.getBody = function() {
console.log('Failed parsing expected JSON response, returned raw response');
return this.body;
}
}
}

if (responseType.indexOf('application/x-www-form-urlencoded') !== -1) {
return queryString.parse(this.body);
Expand Down