0.0.2 • Published 6 years ago
koa-ratelimit-dynamic v0.0.2
koa-ratelimit-dynamic
koa-ratelimit 的扩展,可以根据用户的信息,动态调整 max 和 duration 参数。
Rate limiter middleware for koa.
Installation
$ npm install koa-ratelimit-dynamic
Example
const Koa = require('koa');
const ratelimit = require('koa-ratelimit-dynamic');
const Redis = require('ioredis');
const app = new Koa();
// apply rate limit
app.use(ratelimit({
db: new Redis(),
duration: 60000,
// duration: async (ctx)=>{ return 1000; }
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,
// max: async (ctx)=>{ return 100; }
disableHeader: false,
}));
// response middleware
app.use(async (ctx) => {
ctx.body = 'Stuff!';
});
app.listen(3000);
console.log('listening on port 3000');
Options
db
redis connection instanceduration
of limit in milliseconds 3600000 or use async function that can define by user's infoerrorMessage
custom error messageid
id to compare requests ipheaders
custom header namesmax
max requests withinduration
2500 or use async function that can define by user's infodisableHeader
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'
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
MIT