What is the most efficient way to return an error number or error status code in JavaScript / NodeJS? For example, I would like to return a status code (or error code) of 401 in the following snippet:
var login = function (params, callback) {
var email = params.email || '',
password = params.password || '';
if (!isValidEmail(email)) {
return callback(new Error('Email address required', 401));
}
// Do something else
};
The login method, above, would be called as follows:
authRouter.post('/login', function(req, res) {
svc.login(req.body, function (err, response) {
if (err) {
err.statusCode = err.statusCode || 401;
return res.status(err.statusCode).send({ message: err.message });
} else {
return res.send(response);
}
});
});
The goal here is to have the err.statusCode
(or similar) set in the method and passed back via the callback. Basically, I'm looking for a shorthand version of this:
var err = new Error('Email address required');
err.statusCode = 401;
return callback(err);
You can create your own error class for something like this. I've done something similar on several projects:
class HttpError extends Error {
constructor (message, statusCode) {
super(message);
this.statusCode = statusCode;
}
}
Now you can use it the way you expected it to work:
return callback(new HttpError('Email address required', 401));
Personally I prefer to create individual error types for the kinds of error my app use to make the code more readable. When you're in a rush, especially if you have junior developers working on your code, you will find that most people won't remember what 401
error is. I normally do something like this:
class UnauthorizedError extends Error {
constructor (message) {
super(message);
this.statusCode = 401;
}
}
class ForbiddenError extends Error {
constructor (message) {
super(message);
this.statusCode = 403;
}
}
class NotFoundError extends Error {
constructor (message) {
super(message);
this.statusCode = 404;
}
}
So I'd use them like this:
return callback(new UnauthorizedError('Email address required'));
IMHO this makes the code more readable and also makes the error codes self-documenting in the source code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With