https://github.com/cdimascio/wcp-errors
Generate normalized http error messages
https://github.com/cdimascio/wcp-errors
errors expressjs http-errors
Last synced: 4 months ago
JSON representation
Generate normalized http error messages
- Host: GitHub
- URL: https://github.com/cdimascio/wcp-errors
- Owner: cdimascio
- License: mit
- Created: 2017-07-24T13:29:58.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-08-29T02:08:09.000Z (over 7 years ago)
- Last Synced: 2025-03-29T11:33:19.711Z (9 months ago)
- Topics: errors, expressjs, http-errors
- Language: JavaScript
- Homepage:
- Size: 311 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# wcp-errors
Package for normalizing api errors using the following format:

## Install
```shell
npm install wcp-errors
```
## Usage
```JavaScript
const { notFound } = require('wcp-errors');
badRequest('first name is required.');
```
## Examples (ExpressJS)
```javascript
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 try:
- [http://localhost:3000/not_found](http://localhost:3000/not_found)
- [http://localhost:3000/bad_request](http://localhost:3000/bad_request)
- [http://localhost:3000/multiple_errors](http://localhost:3000/multiple_errors)
- [http://localhost:3000/throws](http://localhost:3000/throws)
## 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
```javascript
badRequest();
conflict();
forbidden();
internalServerError();
methodNotAllowed();
notAcceptable();
notFound();
requestEntityTooLarge();
unAuthorized();
unsupportedMediaType();
```
Optionally, add additional errors to a wcp error
```javascript
// 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](#basic) are not sufficient.
```javascript
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*
```javascript
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