express-gateway
Version:
A microservices API gateway built on top of ExpressJS
22 lines (20 loc) • 645 B
JavaScript
const RateLimit = require('express-rate-limit');
const RedisStore = require('rate-limit-redis');
const logger = require('../../logger').policy;
module.exports = (params) => {
if (params.rateLimitBy) {
params.keyGenerator = (req) => {
try {
return req.egContext.evaluateAsTemplateString(params.rateLimitBy);
} catch (err) {
logger.error('Failed to generate rate-limit key with config: %s; %s', params.rateLimitBy, err.message);
}
};
}
return new RateLimit(Object.assign(params, {
store: new RedisStore({
client: require('../../db'),
expiry: params.windowMs / 1000
})
}));
};