Package for normalizing api errors using the following format:
npm install wcp-errors
const { notFound } = require('wcp-errors');
badRequest('first name is required.');
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));
}
});
cd example/express
npm install
npm start
Open a browser and try:
- http://localhost:3000/not_found
- http://localhost:3000/bad_request
- http://localhost:3000/multiple_errors
- http://localhost:3000/throws
All basic Apis take the following three optional arguments:
message
: a string describing the errorerror
: anError
objecttarget
: an object with shape{ type, name }
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
})
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
})
-
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 are welcome! Please submit a PR.
MIT