jack2
Version:
HTTP middleware for Node.js/Q-JSGI/JSGI2
64 lines (59 loc) • 2.17 kB
JavaScript
function getBody(body) {
var buffer = "";
return Q.when(
body.forEach(function(data) { buffer += data; }),
function() { return buffer; }
);
}
exports.Dump = function Dump(app) {
return function(request) {
var reqBodyP = null;//getBody(request.body);
return Q.when(app(request), function(response) {
var resBodyP = null;//getBody(response.body);
Q.all([reqBodyP, resBodyP]).spread(function (reqBody, resBody) {
console.log("REQUEST:", request.method, request.url, request.headers);
reqBody.split("\n").forEach(function(line) {
console.log(" > " + line);
});
console.log("RESPONSE:", response.status, response.headers);
resBody.split("\n").forEach(function(line) {
console.log(" < " + line);
});
console.log(Array(81).join("="));
});
return response;
});
}
}
exports.SimpleProxy = function SimpleProxy(transform) {
return function(request) {
request = transform(request) || request;
request.headers.host = request.host + ":" + request.port;
request.url = request.scheme + "://" + request.headers.host + request.path;
// console.log(request);
return Q_HTTP.request(request);
}
}
exports.SimpleCache = function SimpleCache(app) {
var cache = {};
return app;
return function(request) {
var key = JSON.stringify(request);
if (key in cache) {
console.log("cache hit!", key);
return cache[key];
} else {
console.log("cache miss.", key);
return app(request);
return Q.when(app(request), function(response) {
// if (response.status >= 200 && response.status < 300) {
// Q.when(getBody(response.body), function(body) {
// response.body = [body];
// cache[key] = response;
// });
// }
return response;
});
}
}
}