UNPKG

error-request-handler

Version:

helps you handle your errors better, using request module.

128 lines (104 loc) 4.51 kB
# Error request handler error request handler is module based on Request module, this module allows you to use the power of Request with a simple to use error handling machenisim. You can return custom errors based on api error code using your own custom error/function. ## How? ```javascript npm install error-request-handler ``` ```javascript var errorHandlerRequest = require('error-request-handler'); errorHandlerRequest('http://www.google.com', { method: "get" }, { 1506: new Error("this is custom error"), 1500: function (response, body, next) { //do stuff before throwing this error next(new Error("This is custom function error")); },'*': function (response, body, next) { //if it's not 1506 or 1500 then enter this code next(new Error("This is custom function error")); }, }, function (err, response, body) { if (err) return next(err); res.send({}); }); }) ``` ## more The request function takes 4 arguments. ### uri > the uri of the api resource. ### options > specific request options ex. method type, body, headers... *can take every option that [request](https://www.npmjs.com/package/request#requestoptions-callback) module accepts. ### errorObject > this object contains key value pair of error number/string and error handler (custom error/function). > it's possible to specify '*' error handler for each unspecified error, this handler will catch every error if a specific error handler wasn't provided. ### callback > this function take (err, response, body) and allows you to handle the response. ## The flow > When a response return from the server it goes through generalErrorHandler (specified in options), your custom errorObject and then your custom callback. > generalErrorHandler check if an general error occurred and return next with or without an error. > After the general error handler the specific error handler will look for the error in the error object* and then run the corresponding error function or throw the custom error provided. > your callback function fired at the end and get the error object* ,response and body. *if occurred ## Your custom request function You can create custom base request that you can use across your entire application by doing this: ```javascript var errorHandlerRequest = require('error-request-handler'); var customRequest = errorHandlerRequest.defaults({ generalErrorHandler: function (response, body, next) { if (response.statusCode === 200) return next(); if (response.statusCode === 404) return next(new Error("page not found")); if (response.statusCode === 401) return next(new Error("Access denied")); if (response.statusCode === 400 && body.errorCode === 0) return next(new Error("Unknown user error occur", 1)); },errorCodeField: "the name of the error code field", }); customRequest("http://localhost:1337/error", { method: "get" }, { 1506: new Error("this is custom error for api error 1506"), 1500: function (response, body, next) { next(new Error("This is custom function error")); } }, function (err, response, body) { if (err) return next(err); res.send({}); }); ``` ## Options ### default options object ```javascript var defaults = { requestOptions: { headers: { "Accept": "JSON", "Content-Type": "application/json" }, json: true }, errorCodeField: "errorCode", generalErrorHandler: function (response, body, next) { next(); } }; ``` ### requestOptions > you can specify default request object. !important by default the request options are set to allow json response in order to handle the errors. ### errorCodeField > this option specify the name of the error code property in the body object. ```javascript body = { errorCode:15633, moreData: "from server", ... }; ``` ### generalErrorHandler > This function take 3 arguments (response, body, next). > In this function you can check for a general errors like the ones in the response.statusCode, this function triggered before the custom error handler. > by default this function returned next. > !important this function should always return next at each endpoint of your code.