UNPKG

rest-api-errors

Version:

Common errors that can be thrown to simplify promise based api implementations

103 lines (89 loc) 2.95 kB
# Rest Api Errors for Nodejs ## What is this? It's a set of errors that can be thrown to break a promise chain in a clean and logical way when creating APIs using NodeJS. I created it because I like promises and I like rest and I like simple. It also keeps me from having to remember the right http status codes to return for various errors. ## How do I use it? Here's an example of an endpoint to delete a Thang. ```Javascript // delete a thang app.delete('/thangs/:id', function (req, resp) { var username = req.user.username; var id = req.params.id; Thang.findOne({ _id: id }).then(thang => { if (!thang) { // give em a 404 with custom error code and message throw new NotFoundError('thang_not_found', "I can't find that thang :("); } else if (thang.createdBy !== username) { // give em a generic 403 throw new ForbiddenError(); } // it's all good so actually delete the thang return Thang.deleteOne({ _id: id }); }).then(function () { resp.status(204).end(); }).catch(function (err) { if(err instanceof ApiError) { // handle any ApiError with a simple elegant response resp.status(err.status).send({ code: err.code, message: err.message }); } else { // handle all other errors in some kinda way handleError(resp, err); } }); }; ``` ## What errors are supported? All of following are implemented. Throw them to your hearts content. * **400** - BadRequest * **401** - Unauthorized * **402** - PaymentRequired * **403** - Forbidden * **404** - NotFound * **405** - MethodNotAllowed * **406** - NotAcceptable * **407** - ProxyAuthenticationRequired * **408** - RequestTimeout * **409** - Conflict * **410** - Gone * **411** - LengthRequired * **412** - PreconditionFailed * **413** - RequestEntityTooLarge * **414** - RequestUriTooLong * **415** - UnsupportedMediaType * **416** - RequestedRangeNotSatisfiable * **417** - ExpectationFailed * **418** - IAmATeapot * **420** - EnhanceYourCalm * **422** - UnprocessableEntity * **423** - Locked * **424** - FailedDependency * **426** - UpgradeRequired * **428** - PreconditionRequired * **429** - TooManyRequests * **431** - RequestHeaderFieldsTooLarge * **444** - NoResponse * **449** - RetryWith * **450** - BlockedbyWindowsParentalControls * **499** - ClientClosedRequest * **500** - InternalServerError * **501** - NotImplemented * **502** - BadGateway * **503** - ServiceUnavailable * **504** - GatewayTimeout * **505** - HTTPVersionNotSupported * **506** - VariantAlsoNegotiates * **507** - InsufficientStorage * **508** - LoopDetected * **509** - BandwidthLimitExceeded * **510** - NotExtended * **511** - NetworkAuthenticationRequired * **598** - NetworkReadTimeout * **599** - NetworkConnectTimeout