Skip to content

Limiting access to some endpoint using express middleware backed by levelup and memdown

License

Notifications You must be signed in to change notification settings

urbanhire/express-rate-limit-middleware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

express-rate-limit-middleware

Installation | Usage | Options | License

Limiting access to endpoint using express middleware backed by LevelDB like and redis storage

Installation

  • From published module in npm (not latest) npm install --save express-rate-limit-middleware
  • Using github master branch npm install --save https://github.com/urbanhire/express-rate-limit-middleware.git#master

Usage

  • By default, you only need to pass 2 parameters, limit and reset
  • You can use this middleware as application level (every endpoint will be limited) or router level
  • Application Level Middleware
const express = require('express')
const app = express()
const rateLimiter = require('express-rate-limit-middleware').rateLimit

// limit 1000 request per hour to all url
app.use(rateLimiter({
  limit: 1000, 
  reset: '1 hour' // more convenient to set reset
}))
  • Router Level Middleware
const express = require('express')
const router = express.Router()
const rateLimiter = require('express-rate-limit-middleware').rateLimit

// limit 1000 request per hour to all url
router.get('/api', 
	rateLimiter({
  		limit: 1000, 
  		reset: '1 hour' // more convenient to set reset
	}),
	(req, res, next) => {
		res.send('OK')
	}
)

Options

  • limit : How many request per interval
  • reset : Interval
  • storageEngine : Storage engine you want to use, we provide 2 storage engine, levelDB and redis. LevelDB storage will be used if you don't pass this parameter
  • Example of using redis
const express = require('express')
const app = express()
const redisStorage = require('express-rate-limit-middleware').redisRateLimit
const redisClient = require('redis-pool-connection')({
  host: '127.0.0.1',
  port: 6379,
  options: {
    db: 1
  }
})
// here i'm using redis-pool-connection module but you can use any redis client
const rateLimiter = require('express-rate-limit-middleware').rateLimit
app.set('port', process.env.PORT || 3000)
app.set('env', process.env.NODE_ENV || 'development')
// Middlewares setup
app.use(logger('dev'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(rateLimiter({
  limit: 200, 
  reset: '1 minute',
  storageEngine: redisStorage(redisClient)
}))
  • Key generator, by default we're using req.ip and req.originalUrl provided by express, you can define your own key generator
  • Example
const express = require('express')
const app = express()
const rateLimiter = require('express-rate-limit-middleware').rateLimit

app.set('port', process.env.PORT || 3000)
app.set('env', process.env.NODE_ENV || 'development')
// Middlewares setup
app.use(logger('dev'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(rateLimiter({
  limit: 200, 
  reset: '1 minute',
  keyGenerator: (req, res) => {
    return req.ip + 'anjay'
  }
}))

Todo

  • Logging

License

MIT © [Adhitya Ramadhanus]

About

Limiting access to some endpoint using express middleware backed by levelup and memdown

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages