Skip to content

internxt/service-middleware

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Internxt Service Middleware Build Status

Common Express middleware for various Internxt services.

$ npm install internxt/service-middleware --save
var Storage = require('storj-service-storage-models');
var db = new Storage({ /* config */ });
var middleware = require('storj-service-middleware');
var app = require('express')();

app.use(middleware.authenticate(db));
app.use(middleware.errorhandler());

Rate Limiter

Instantiate the rate limiter with a redis client client and your express app app

const app = express();
const client = require('redis').createClient();
const limiter = middleware.rateLimiter(client);

Then, you can use limiter as middleware and pass it an options object.

app.get('/route', limiter({
  lookup: function(req) {
    return [req.user._id, req.connection.remoteAddress]
  },
  onRateLimited: function(req, res, next) {
    log.info('user rate limited', req.user);
    return next(new errors.BadRequestError('Slow down, dude.'));
  },
  total: 150,
  expire: 1000 * 60 // 150 requests a minute allowed
  }), function(req, res) {
  res.status(200).send('hello');
});

Testing

Redis must be running for the tests to work. The easiest way to get an instance running is via Docker.

$ docker run --name redis -p 6379:6379 -d redis

Then, npm test will kick off the test suite for you.

License

Credit for much of the rate limiter code goes to https://github.com/juliendangers/express-limiter2 released under the MIT license.

All other code released under AGPLv3.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%