blob: e7c08b0f78fb1c45eacd5b67d9bbcfee5947446a [file]
'use strict';
var cache = require('volos-cache-memory');
var async = require('async');
var debug = require('debug')('gateway:cache');
var getKey = function (req) {
return req.token.application_name;
}
var caches = [];
var middleware = function (req, res, next) {
if (!req.token
|| !req.token.api_product_list
|| !req.token.api_product_list.length
) {
return next();
}
debug('cache checking products', req.token.api_product_list);
req.originalUrl = req.originalUrl || req.url; // emulate connect
var found = false;
// this is arbitrary, but not sure there's a better way?
async.eachSeries(req.token.api_product_list,
function (productName, cb) {
if(!found) {
var cache = caches[productName];
executeDefaultCache(cache, req, res, cb);
found = true;
}else{
cb();
}
},
function (err) {
next(err);
}
);
}
var executeDefaultCache = function (cache, req, res, cb) {
cb();
};
module.exports.init = function (config, logger, stats) {
var options = {
key: getKey
};
Object.keys(config).forEach(function (productName) {
var product = config[productName];
if (!product.ttl) {
debug('could not load cache for ' + productName + ' because ttl is missing', product)
return; // skip non-cache config
}
var cacheInstance = cache.create(config[productName]);
caches[productName] = cacheInstance;
debug('created cache for', productName);
debug('caches are ', caches)
});
return {
onrequest: function (req, res, next) {
middleware(req, res, next);
}
};
};