@mvp-rockets/namma-ratelimit
Version:
A package to handle ratelimit in node apis
99 lines (80 loc) • 2.59 kB
JavaScript
require('app-module-path').addPath(__dirname);
const express = require('express');
const app = express();
const server = require('http').createServer(app);
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
const cls = require('cls-hooked');
const CLS_NAMESPACE = "namma_rateLimit"
const createNamespace = require('cls-hooked').createNamespace;
createNamespace(CLS_NAMESPACE);
const { ApiError } = require('@mvp-rockets/namma-lib/utilities');
const { logInfo, logError } = require('@mvp-rockets/namma-lib/utilities');
const { HTTP_CONSTANT } = require('@mvp-rockets/namma-lib');
const { Logger } = require('@mvp-rockets/namma-lib');
const ratelimit = require('ratelimit')
ratelimit.initialize({
socket: {
host: 'redis_server'
},
password: 'eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81'
});
const uuid = require('uuid')
Logger.initialize({
isEnable: false,
clsNameSpace: CLS_NAMESPACE
});
app.use((req, res, next) => {
const namespace = cls.getNamespace(CLS_NAMESPACE);
namespace.run(() => {
namespace.set('traceId', uuid.v4());
logInfo(`${req.method} ${req.originalUrl}`, { ...req.body });
next();
});
});
const { requestsPerMin } = require('ratelimit')
app.get('/rate-limit-test', requestsPerMin(10), (req, res) => {
res.send({
status: false,
message: 'working fine',
});
});
app.use((req, res, next) => {
const err = new ApiError('Not Found', 'Resource Not Found!', HTTP_CONSTANT.NOT_FOUND);
next(err);
});
app.use((error, request, response, next) => {
if (error.constructor === ApiError) {
logError('Failed to execute the operation', {
value: error.error,
stack: error.error ? error.error.stack : []
});
if (error.code) { response.status(error.code); }
response.send({
status: false,
message: error.errorMessage
});
} else {
response.status(501);
logError('Failed to execute the operation', { value: error, stack: error.stack });
response.send({
status: false,
errorType: 'unhandled',
message: 'Something went wrong!'
});
}
});
process.on('unhandledRejection', (error) => {
console.log(error);
logError('unhandledRejection', { error });
});
process.on('uncaughtException', (error) => {
console.log(error);
logError('uncaughtException', { error });
});
const API_PORT = 3000
server.listen(API_PORT, () => {
console.log(`Express server listening on Port :- ${API_PORT}`);
});