@ya_myn/request-limiter
v2.0.3
Published
Simple request limiter that allows you to control the number of simultaneous request to any resource
Readme
request-limiter 2.0.0
Simple request limiter that allows you to control the number of simultaneous request to any resource with cashe (use 'node-cashe')
Install
npm i request-limiterExamples
Require module
const ReqLimiter = require('request-limiter').getInstance('myInstance', options);ReqLimiter.getInstance(instance, options)
Get or create instance Returns: instance of ReqLimiter
Parameters
| Name | Type | Description | Required |
| -------- | -------- | -------------------------------- | -------- |
| instance | string | ReqLimiter instances name |true |
| options | object` | ReqLimiter configuration options | false |
options properties
| Name | Type | Description | default |
| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
| maxAttempts | number | Maximum number of request attempts for one function | 42 |
| maxRepeatAttempts | number | Maximum number of attempts to request a request after receiving an error from the remote resource about exceeding the limit | 6 |
| checkDelay | number | The amount of time in millisecond after which the limiter will make a new attempt to add the request to the queue | 1200 |
| maxOneTimeReq | number | The number of request that can be executed simultaneously in one port | 6 |
| clientName | string | The name to be passed to the callback function in the reqWithCheck method | client |
| limitErrorValidator | function | A simple function that checks whether an error sent from a remote resource belongs to an error exceeding the request limit returns a boolean | error => error.code === 403 |
| ReqLimitError | Error | Error class or classes that extend it. allows to give a custom error to the client | ReqLimitError |
ReqLimiter.haveConnect(port)
checks if a port exists and if there is cached data for it Returns: any
| Name | Type | Description | Required |
| ---- | -------- | --------------------------------------- | -------- |
| port | string | name of the port you would like, of use | true |
const isConnect = ReqLimiter.haveConnect('myPort');ReqLimiter.setClient(port, client)
set client data for your port Returns: void
| Name | Type | Description | Required |
| ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| port | string | name of the port you would like, of use | true |
| client | any | any information you want to saved that it will be passed as a parameter named <ReqLimiter. clientName> for the callback in the reqWithCheck method | true |
ReqLimiter.setClient('myPort', { accessToken: 'myAccessToken' });ReqLimiter.reqWithCheck(port, cb, args, attempts)
Method that takes a function that needs to be queued for a given port
Returns: cb call results
| Name | Type | Description | Required |
| -------- | ---------- | ------------------------------------------------------------- | -------- |
| port | string | name of the port you would like, of use | true |
| cb | function | callback function, that need add to port que | true |
| args | object | arguments for callback function | false |
| attempts | number | The number of attempts that have already been made, default 0 | false |
const fetchToImage = ({ client, id }) => {
return myFetcher('url', { accessToken: client.accessToken, id });
};
ReqLimiter.reqWithCheck('myPort', fetchToImage, { id: 'myImgId' }).then((data) => {
// console.log(data)
// returns result to call fetchToImage
});Documentation generated with doxdox.
