http-error-expressjs v1.0.1
http-error-expressjs
Handling HTTP errors for your Express application easily.
Install
This is a Node.js module available through the
npm registry. Installation is done using the
npm install
command:
npm install http-error-expressjs
Features
Examples
CommonJS
var { HttpError } = require("http-error-expressjs")
var express = require("express")
var app = express()
// in the beginning of your app (important)
app.use(HttpError.initializer)
// your app routes or other middlewares
//sample APIs
app.get("/400", (req, res, next) => {
return HttpError.BadRequest()
})
app.get("/500", (req, res, next) => {
return HttpError.InternalServerError("something went wrong")
})
app.get("/custom", (req, res, next) => {
const customError = {
statusCode: 502,
message: "custom message",
errorKey: "custom_error", // optional parameter
description: "description", // optional parameter
help: "https://domain.example/integration/fixes/custom-api", // optional parameter
invalidParams: [
{
message: "invalid value",
location: "body", // optional parameter
param: "email"
}
//you can add more objects
] // optional parameter
}
return HttpError.customError(errorObject)
})
ES6
import { ErrorsAttrs, HttpError } from "http-error-expressjs"
import express, { NextFunction, Request, Response } from "express"
let app = express()
// in the beginning of your app (important)
app.use(HttpError.initializer)
// your app routes or other middlewares
//sample APIs
app.get("/400", (req: Request, res: Response, next: NextFunction) => {
return HttpError.BadRequest("invalid request data")
})
app.get("/500", (req: Request, res: Response, next: NextFunction) => {
return HttpError.InternalServerError()
})
app.get("/custom", (req: Request, res: Response, next: NextFunction) => {
const custom: ErrorsAttrs = {
statusCode: 502,
message: "custom message",
errorKey: "custom_error", // optional parameter
description: "description", // optional parameter
help: "https://domain.example/integration/fixes/custom-api", // optional parameter
invalidParams: [
{
message: "invalid value",
location: "body", // optional parameter
param: "string"
}
//you can add more objects
] // optional parameter
}
return HttpError.customError(errorObject)
})
ErrorObject
statusCode
: the status code of the error.required
message
: the error message.required
description
: the error description.optional
help
: the error url that can help the client to fix the api issue e.g (https://your-domain.example/integration/fixes/auth-api)optional
invalidParams
: the errors of request in case you need to validate the request data.optional
message
: the error message.required
param
: the error parameter name e.g (email, password, name, etc).optional
location
: the location of parameter key.required
errorKey
: the error key and the main purpose we can use it for localization part and in this case we will have a generic errors we can catch any error message by keyfor example:
we can store local.en.json and local.en.json includes{ "bad_request": "invalid user request data" }
and local.ar.json includes
{ "bad_request": "بايانات غير صحيحة" }
and the both files located in the frontend so by using the response
errorKey
we can localize the error message easily.optional
HttpError
Initializer
it's a middleware should be used in the top of your app or at lest before your
routes that include HttpError
// in the beginning of your app (important)
app.use(HttpError.initializer)
// OR
app.use((req, res, next) => {
HttpError.initializer(req, res, next)
})
customError
it's a helper function can help you to create your custom error.
HttpError.{{ any function from the next list }}
they are helper functions allow you to send sepecific error to the client
attrs
error object to customize your error responseoptional
message
: the error message.required
errorKey
: the error key.optional
help
: the error help location/url.optional
description
: the error descriptionoptional
invalidParams
: the request parameters errorsoptional
status code | function name |
---|---|
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 | PayloadTooLarge |
414 | URITooLong |
415 | UnsupportedMediaType |
416 | RangeNotSatisfiable |
417 | ExpectationFailed |
418 | ImATeapot |
421 | MisdirectedRequest |
422 | UnprocessableEntity |
423 | Locked |
424 | FailedDependency |
425 | TooEarly |
426 | UpgradeRequired |
428 | PreconditionRequired |
429 | TooManyRequests |
431 | RequestHeaderFieldsTooLarge |
451 | UnavailableForLegalReasons |
500 | InternalServerError |
501 | NotImplemented |
502 | BadGateway |
503 | ServiceUnavailable |
504 | GatewayTimeout |
505 | HTTPVersionNotSupported |
506 | VariantAlsoNegotiates |
507 | InsufficientStorage |
508 | LoopDetected |
509 | BandwidthLimitExceeded |
510 | NotExtended |
511 | NetworkAuthenticationRequired |