Custom error exceptions are made to make it easier to handling errors. You can also make custom errors as needed.
$ npm install custom-error-exceptions
Using Template Error (BAD_REQUEST)
const express = require('express');
const {
handlers: { errorHandler },
errors: { BadRequestError }
} = require('custom-error-exceptions');
const app = express();
const port = 3044;
app.use(express.json());
//TEMPLATE BAD REQUEST ERROR
app.post('/', (req, res) => {
const name = req.body.name;
if (typeof name !== 'string') {
throw new BadRequestError();
}
res.send(
req.body
);
});
//Error Handler
app.use(errorHandler);
app.listen(port, () => console.log(`app listen on port ${port}`));
Using Template Error (BAD_REQUEST) With Custom Message
//TEMPLATE BAD REQUEST ERROR WITH CUSTOM MESSAGE
app.post('/custom-message', (req, res) => {
const name = req.body.name;
if (typeof name !== 'string') {
throw new BadRequestError('Name type must be string');
}
res.send(req.body);
});
Using Custom Error
const {
handlers: { errorHandler },
errors: { CustomError }
} = require('custom-error-exceptions');
//CUSTOM ERROR
app.post('/custom-error', (req, res) => {
const name = req.body.name;
if (typeof name !== 'string') {
throw new CustomError('Custom Message', 'CUSTOM_CODE', 700);
}
res.send(req.body);
});
Handling NOT_FOUND Route
const {
handlers: { errorHandler, notFoundHandler },
} = require('custom-error-exceptions');
------------------------------------
YOUR ROUTE
------------------------------------
app.use(notFoundHandler);
app.use(errorHandler);
How to handle UnhandledRejection for Async Function in Express
const {
handlers: { createHandler }
} = require('custom-error-exceptions');
const getName = async (req, res) => {
/*some asynchronous logic here
example :
const nameFromDb = await getDataFromDb(req.body.id);
*/
const id = req.body.id;
res.send({
id,
nameFromDb: 'John Doe'
})
}
//Implementing in Router
app.post(
'/unhandled-rejection',
createHandler(getName)
);
To further explore you can see an example this repo.
- CustomError
- BadRequestError
- UnauthorizedError
- PaymentRequiredError
- ForbiddenError
- NotFoundError
- MethodNotAllowedError
- NotAcceptableError
- ProxyAuthenticationError
- RequestTimeoutError
- ConflictError
- GoneError
- LengthRequiredError
- PreconditionFailedError
- PayloadTooLargeError
- UriTooLongError
- UnsupportedMediaTypeError
- RangeNotSatisfiableError
- MisdirectedRequestError
- UnprocessableEntityError
- LockedError
- FailedDependencyError
- TooEarlyError
- UpgradeRequiredError
- PreconditionRequiredError
- TooManyRequestsError
- RequestHeaderError
- LegalReasonsError
- InternalServerError
- NotImplementedError
- BadGatewayError
- ServiceUnavailableError
- GatewayTimeoutError
- HttpNotSupportedError
- VariantAlsoNegotiatesError
- InsufficientStorageError
- LoopDetectedError
- NotExtendedError
- NetworkAuthenticationRequiredError
The list above is based on the client error list and server error list as on this page.
- version 1.0.0
- Basic Template Errors
- Basic Custom Error
- Error Handler
- Not Found Route Handler for Express
- version 1.1.0
- Create middleware function to handling 'UnhandledRejection' for asynchronous route in Express
- version 1.2.0
- Adding logging middleware in every request with winston
- version 1.2.1
- Adding and showing error logger to console if request error
- version 1.2.2
- Adding handler with view engine (createWebHandler)
- version 1.2.3
- Handling response message when handler get Unhandled Exceptions error message from asynchronous router
- version 1.2.4
- Minor security update for Mocha and Nodemon
- Cristoph Adam Sugianto @brothergiez
- Budhi Widagdo @sapiderman
- Yayat Ruhiyat @yayat