UNPKG

@soinlabs/request

Version:

A request package made with retries and traceability

110 lines (88 loc) 3.63 kB
# Request #### Request library based on HTTP promise for SOIN [![codecov](https://codecov.io/gh/SoinLabs/request/branch/master/graph/badge.svg?token=MJP66V0RQM)](https://codecov.io/gh/SoinLabs/request) [![npm version](https://badgen.net/npm/v/@soinlabs/request)](https://www.npmjs.com/package/@soinlabs/request) [![npm downloads](https://badgen.net/npm/dm/@soinlabs/request)](https://www.npmjs.com/package/@soinlabs/request) This repo/package exports 3 libraries: `Request`: It's a simple and lightweight library based on HTTP Promise queries used as a function, ready to use anywhere. `RequestTracking`: It's a complex library based on HTTP Promise queries used as a Class, it's required to instance and pass a Sequelize object before to use `RequestScheduler`: It's another library used to retrieve fetch the HTTP queries inside in the table WebRequestLogs, it's required to instance and pass a Sequelize object before to use ### How to use it? #### Request ```js const { Request } = require('@soinlabs/request') const response = await Request(params) - Where * params - Object * {string} params.method - Default GET * {object} params.headers - Default { content-type: application/json } * {string} params.url - Required * {string} params.responseType - Default json * {object} params.data - Default null * {boolean} params.throwError - Default false * {array} return response - the data from the URL. ``` #### RequestTracking Insert the next SQL script in the database need it: ```sql -- WebRequestLogs definition CREATE TABLE `WebRequestLogs` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `data` JSON, `retries` INTEGER, `attempts` INTEGER, `status` INTEGER, `response` JSON, `error` JSON, `method` VARCHAR(255), `url` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); ``` Add the model in package/model or whatever place where is it the Squeeze models/objects ```js module.exports = (sequelize, DataTypes) => { const WebRequestLog = sequelize.define( 'WebRequestLog', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: DataTypes.INTEGER, }, data: { type: JSON }, retries: { type: DataTypes.INTEGER }, attempts: { type: DataTypes.INTEGER }, status: { type: DataTypes.INTEGER, enum: (-1, 0, 1), }, response: { type: JSON }, error: { type: JSON }, method: { type: DataTypes.STRING }, url: { type: DataTypes.STRING }, }, { tableName: 'WebRequestLogs', } ) return WebRequestLog } ``` And finally, the implementation of RequestTracking ```js const { RequestTracking } = require('@soinlabs/request-tracking') const { WebRequestLog } = require('models/WebRequestLog') const request = new RequestTracking(WebRequestLog) const response = await request.RequestTracking(params) - Where * params - Object * {string} params.method - Default GET * {object} params.headers - Default { content-type: application/json } * {string} params.url - Required * {string} params.responseType - Default json * {object} params.data - Default null * {number} params.retries - Default null * {boolean} params.log - Default null * {array} return response - the data from the URL. ``` #### RequestScheduler Implemente `RequestScheduler` in cronjobs or scheduler logic ```js const { RequestScheduler } = require('@soinlabs/ibs/request-scheduler') const { WebRequestLog } = require('models/WebRequestLog') const requestScheduler = new RequestScheduler(WebRequestLog) await requestScheduler.start(limit) - Where * {number} limit - Default 10 ```