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.
npm install error-request-handler
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({});
});
})
The request function takes 4 arguments.
the uri of the api resource.
specific request options ex. method type, body, headers... *can take every option that request module accepts.
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.
this function take (err, response, body) and allows you to handle the response.
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
You can create custom base request that you can use across your entire application by doing this:
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({});
});
var defaults = {
requestOptions: {
headers: {
"Accept": "JSON",
"Content-Type": "application/json"
}, json: true
},
errorCodeField: "errorCode",
generalErrorHandler: function (response, body, next) {
next();
}
};
you can specify default request object. !important by default the request options are set to allow json response in order to handle the errors.
this option specify the name of the error code property in the body object.
body = {
errorCode:15633,
moreData: "from server",
...
};
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.