I'm building an API (using Expressjs v4) and typically I've dealt with errors within the route rather than using middleware. For example:
router.use('/', function(req, res, next) {
...
if (err)
return res.status(500).send({type: "serverError", message: "Something has gone wrong on our end."});
}
I now realise that middleware is the "way to go." I've seen the rather limited documentation on the Expressjs site here: http://expressjs.com/guide/error-handling.html but still unsure of a few things.
I've added in the server.js
:
function errorHandler(err, req, res, next) {
}
but how do I supposed to handle the different types of errors (400,404,500 etc)?
I'm finding myself writing 3 lines of code each time an error occurs:
//A route
var err = new Error();
err.status = 404;
return next(err);
and I can access the status using:
function errorHandler(err, req, res, next) {
console.log(err.status);
if(err.status == "400")
//do something
else
//etc etc
}
Surely there's an easier way than this? Am I missing something?
Instead manually creating error, you can delegate that error like below.
And your error will go deep down all the routes defined until it find routes with below signature.
You can see the err argument in above route.
Ideally you can use below two methods for both DEVELOPMENT & PRODUCTION environment.
You can capture actual populated error object in there.
You should create your own Error type that allows you to provide all the information necessary to act on the error.
Then include your new error object in your code and use it like
Or you could go crazy and implement an error type for each response code pre-populating the
statusCode
part.Ref: What's a good way to extend Error in JavaScript?