wcp-errors

1.1.1 • Public • Published

wcp-errors

Package for normalizing api errors using the following format:

Install

npm install wcp-errors

Usage

const { notFound } = require('wcp-errors');
badRequest('first name is required.');

Examples (ExpressJS)

app.get('/not_found', function(req, res, next) {
  next(notFound());
});
 
// Bad request example
app.get('/bad_request', function(req, res, next) {
  next(
    badRequest('Eek! A bad request', new Error(), {
      type: 'parameter',
      name: 'Eek',
    })
  );
});
 
app.get('/multiple_errors', function(req, res, next) {
  next(
    badRequest('Eek! A bad request').add({
      code: 'bad_request',
      message: ':-(',
    })
  );
});
 
// Throw! example
app.get('/throws', function(req, res, next) {
  throw new Error('Oh noes!');
});
 
// Error handler
app.use(function(err, req, res, next) {
  if (err instanceof ApiError) {
    res.status(err.statusCode).json(err);
  } else {
    res.status(500).json(internalServerError(err.message, err));
  }
});

Run the examples

  • cd example/express
  • npm install
  • npm start

Open a browser and run

APIs

Basic

All basic Apis take the following three optional arguments:

  • message: a string describing the error
  • error: an Error object
  • target: an object with shape { type, name }

All APIs

badRequest();
conflict();
forbidden();
internalServerError();
methodNotAllowed();
notAcceptable();
notFound();
requestEntityTooLarge();
unAuthorized();
unsupportedMediaType();

Optionally, add additional errors to a wcp error

// Create an error and add additional error(s) to the wcp error
badRequest().add({
  code = 'validation_error', // optional
  message = 'last name required.', // optional
  target, // optional target
  error // optional error object
})

Raw

The raw API is only necessary in circumstances where the Basic are not sufficient.

 const { ApiError } = require('wcp-errors');
 
// Manually create a new API error
const e = new ApiError({
  statusCode: 409,
  code: 'conflict',
  message,
  error, // optional error
  target, // optional target
}).add({
  code = 'error', // optional
  message = 'unxepected error 1', // optional
  target, // optional target
  error // optional error object
}).add({
  code = 'error', // optional
  message = 'unxepected error 2', // optional
  target, // optional target
  error // optional error object
})

TODO

  • Create basic api functions for all http errors
  • Normalize basic apis with add api
  • Create dedicated Express middleware, such that a user does not have to write the fallback error handler middleware.

ex: (currently user's must create a fallback middleware similiar to the following)

app.use(function(err, req, res, next) {
  if (err instanceof ApiError) {
    res.status(err.statusCode).json(err);
  } else {
    res.status(500).json(internalServerError(err.message, err));
  }
});

Contributers

Contributers are welcome! Please submit a PR.

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i wcp-errors

Weekly Downloads

1

Version

1.1.1

License

MIT

Unpacked Size

96.3 kB

Total Files

12

Last publish

Collaborators

  • cdimascio