5.1.0 • Published 5 months ago
koa-ratelimit v5.1.0
koa-ratelimit
Rate limiter middleware for koa.
Installation
# npm
$ npm install koa-ratelimit
# yarn
$ yarn add koa-ratelimit
Example
With a Redis driver
const Koa = require('koa');
const ratelimit = require('koa-ratelimit');
const Redis = require('ioredis');
const app = new Koa();
// apply rate limit
app.use(ratelimit({
driver: 'redis',
db: new Redis(),
duration: 60000,
errorMessage: 'Sometimes You Just Have to Slow Down.',
id: (ctx) => ctx.ip,
headers: {
remaining: 'Rate-Limit-Remaining',
reset: 'Rate-Limit-Reset',
total: 'Rate-Limit-Total'
},
max: 100,
disableHeader: false,
whitelist: (ctx) => {
// some logic that returns a boolean
},
blacklist: (ctx) => {
// some logic that returns a boolean
}
}));
// response middleware
app.use(async (ctx) => {
ctx.body = 'Stuff!';
});
// run server
app.listen(
3000,
() => console.log('listening on port 3000')
);
With a memory driver
const Koa = require('koa');
const ratelimit = require('koa-ratelimit');
const app = new Koa();
// apply rate limit
const db = new Map();
app.use(ratelimit({
driver: 'memory',
db: db,
duration: 60000,
errorMessage: 'Sometimes You Just Have to Slow Down.',
id: (ctx) => ctx.ip,
headers: {
remaining: 'Rate-Limit-Remaining',
reset: 'Rate-Limit-Reset',
total: 'Rate-Limit-Total'
},
max: 100,
disableHeader: false,
whitelist: (ctx) => {
// some logic that returns a boolean
},
blacklist: (ctx) => {
// some logic that returns a boolean
}
}));
// response middleware
app.use(async (ctx) => {
ctx.body = 'Stuff!';
});
// run server
app.listen(
3000,
() => console.log('listening on port 3000')
);
Options
driver
memory or redis redisdb
redis connection instance or Map instance (memory)duration
of limit in milliseconds 3600000errorMessage
custom error messageid
id to compare requests ipnamespace
prefix for storage driver key name limitheaders
custom header namesmax
max requests withinduration
2500disableHeader
set whether send theremaining, reset, total
headers falseremaining
remaining number of requests'X-RateLimit-Remaining'
reset
reset timestamp'X-RateLimit-Reset'
total
total number of requests'X-RateLimit-Limit'
whitelist
if function returns true, middleware exits before limitingblacklist
if function returns true,403
error is thrownthrow
call ctx.throw if true
Responses
Example 200 with header fields:
HTTP/1.1 200 OK
X-Powered-By: koa
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 99
X-RateLimit-Reset: 1384377793
Content-Type: text/plain; charset=utf-8
Content-Length: 6
Date: Wed, 13 Nov 2013 21:22:13 GMT
Connection: keep-alive
Stuff!
Example 429 response:
HTTP/1.1 429 Too Many Requests
X-Powered-By: koa
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1384377716
Content-Type: text/plain; charset=utf-8
Content-Length: 39
Retry-After: 7
Date: Wed, 13 Nov 2013 21:21:48 GMT
Connection: keep-alive
Rate limit exceeded, retry in 8 seconds
License
5.1.0
5 months ago
5.0.1
3 years ago
5.0.0
4 years ago
4.2.1
4 years ago
4.3.0
4 years ago
4.2.0
5 years ago
4.1.2
6 years ago
4.1.1
6 years ago
4.1.0
6 years ago
4.0.0
7 years ago
3.0.0
7 years ago
2.4.0
8 years ago
2.3.0
8 years ago
2.2.0
8 years ago
2.1.0
9 years ago
2.0.0
9 years ago
1.1.0
9 years ago
1.0.3
10 years ago
1.0.1
10 years ago
1.0.0
10 years ago