$ npm i superlimiter -SUse for koa frequency limit
const Koa = require('koa');
const Limiter = require('superlimiter');
const limiter = new Limiter(redis, {
ttl: 60,
max: 10,
hash: (ctx) => {
if (!ctx.session || !ctx.session.user) {
return '';
}
return ctx.session.user.account;
},
});
const app = new Koa();
// user session
app.use(session());
app.use(limiter.middleware());
// other middlewares
...
app.listen(8080);-
clientThe redis client -
optionsThe options for limiter -
options.ttlThe ttl for frequency limit, default is60 -
options.maxThe max count for frequency limit, default is10 -
options.expiredThe expired for frequency limit, it should beHH:mm. If it's set, the ttl will be ignored -
options.hashThe function to get the hash key, default is_.identity, if return'', the limit will be ignore -
options.prefixThe prefix for the cache key -
options.errThe error will be throw when count max thanoptions.max, default isnew Error('Exceeded the limit frequency')
const Redis = require('ioredis');
const Limiter = require('superlimiter');
const redis = new Redis('redis://127.0.0.1:6379');
const limiter = new Limiter(redis, {
ttl: 10,
});ttl expired prefix can be reset
const Redis = require('ioredis');
const Limiter = require('superlimiter');
const redis = new Redis('redis://127.0.0.1:6379');
const limiter = new Limiter(redis, {
ttl: 10,
});
limiter.ttl = 60;
limiter.expired = '23:30';
limiter.prefix = 'my-test-';client options ttl expired prefix
const Redis = require('ioredis');
const assert = require('assert');
const Limiter = require('superlimiter');
const redis = new Redis('redis://127.0.0.1:6379');
const limiter = new Limiter(redis, {
ttl: 10,
});
assert.equal(limiter.client, redis);
// {ttl : 10, .. ..}
console.info(limiter.options);
assert.equal(limiter.ttl, 10);
assert.equal(limiter.expired, '');
assert.equal(limiter.prefix, 'super-limiter-');Inc the count of the key, if the count bigger than max, it will be throw an error, otherwise it will be resolve. If the hash function return '', it will be resolve without any change of count.
...argsThe arguments for the hash function
const Redis = require('ioredis');
const Limiter = require('superlimiter');
const redis = new Redis('redis://127.0.0.1:6379');
const limiter = new Limiter(redis, {
ttl: 10,
});
limiter.exec('mykey').then(() => {
console.info('pass');
}).catch(console.error);...argsThe arguments for the hash function
const Redis = require('ioredis');
const Limiter = require('superlimiter');
const redis = new Redis('redis://127.0.0.1:6379');
const limiter = new Limiter(redis, {
ttl: 10,
});
limiter.getCount('mykey').then((count) => {
console.info(count);
}).catch(console.error);typeThe middleware's type, it can bekoaorexpress, default iskoa.
The middleware for koa and express. For koa, it will use ctx for the hash argument. For express, it will use req, res for the hash argument.
const Koa = require('koa');
const Limiter = require('superlimiter');
const limiter = new Limiter(redis, {
ttl: 60,
max: 10,
hash: (ctx) => {
if (!ctx.session || !ctx.session.user) {
return '';
}
return ctx.session.user.account;
},
});
const app = new Koa();
// user session
app.use(session());
app.use(limiter.middleware());
// other middlewares
...
app.listen(8080);Get the keys of this limiter
withTTLGet the ttl of key if settrue, default isfalse
const Redis = require('ioredis');
const Limiter = require('superlimiter');
const redis = new Redis('redis://127.0.0.1:6379');
const limiter = new Limiter(redis, {
ttl: 10,
});
// ["...", "..."]
limiter.keys().then(console.info).catch(console.error);
// [{"key": "...", "ttl": ..}, ...]
limiter.keys(true).then(console.info).catch(console.error);