Skip to content

Latest commit

 

History

History
185 lines (160 loc) · 4.76 KB

README.md

File metadata and controls

185 lines (160 loc) · 4.76 KB

Custom Error Exceptions

Test Status Version Status Issues Status

Custom error exceptions are made to make it easier to handling errors. You can also make custom errors as needed.

Installation

$ npm install custom-error-exceptions

Usage

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.

LIST OF ERROR TEMPLATES

  • 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 History

  • 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

Contributor