express-limit
express-limit is a small project that add rate limitations to your API.
Installation
npm install --save express-limit
Usage
const limit = limit; app;
Options
max = 60 // Maximum request per period period = 60 * 1000 // Period in milliseconds prefix = 'rate-limit-' // Prefix of the key status = 429 // Status code in case of rate limit reached message = 'Too many requests' // Message in case of rate limit reached { // The identifier function/value of the key (IP by default, could be "req.user.id") return requestip || requestips; // Read from Default properties } headers = // Headers names remaining: 'X-RateLimit-Remaining' reset: 'X-RateLimit-Reset' limit: 'X-RateLimit-Limit' store = // The storage, default storage: in-memory
In some cases, you could want to skip the limitation you made for trusted client. In this case, you can add a special field in the request object:
req_skip_limits = true;
Also, you could want to add specific limitations for a special client. In this case, you can add a special field in the request object:
req_custom_limits = max: 1000 // 1000 requests period: 60 * 1000 // per minutes;
Just don't forget where you place this modification! It could be applied for all routes!
Available Stores
Actually, two stores have been made:
- InMemoryStore (default store, nothing to do)
const RateLimiter = RateLimiter;const InMemoryStore = InMemoryStore; const store = ; const limit = { optionsstore = store; return optionsmiddleware;}; app;
- RedisStore
const redis = ;const client = redis; const RateLimiter = RateLimiter;const RedisStore = RedisStore; const store = client; const limit = { optionsstore = store; return optionsmiddleware;}; app;