Skip to content

Throw error objects directly from express response

License

Notifications You must be signed in to change notification settings

felipezarco/throwlhos

Repository files navigation

Throwlhos

Throws error objects

throw Error(... // So what the heck goes here?

You do not know exactly what to throw?! We've got you covered!

Example of throwlhos object throw:

throw throwlhos.err_internalServerError('Oops..! Something went wrong!', error)

Example of Express response throw:

If you're using express you do not need to use the throwlhos object, since methods are accessible through the response:

image License: MIT npm version Build Status Coverage Status Downloads

npm

Installation

The latest version is available at: https://www.npmjs.com/package/throwlhos

Use your favorite package manager to install. For instance:

  yarn add throwlhos

Basic Usage

import throwlhos from 'throwlhos'
import { Request, Response } from 'express'

class FooBarController {
  async index(request: Request, response: Response) {
    console.log(throwlhos.err_internalServerError())
    // IThrowlhos object
  }
}

Above code prompts the following output:

{
  code: 500,
  status: 'INTERNAL_SERVER_ERROR',
  message: 'Internal Server Error'
} 

err_* methods accept two optional parameters:

message?: string | null
errors?: any

Returned throwlhos object type exaplained:

export type IThrowlhos = {
  code: number
  status: string
  message: string
  errors: any
}
  • code: Number value of HTTP Status Code

  • status: String value of HTTP Status Name

  • message: Message given at first parameter or HTTP Status Name human-readable if none or null is given.

  • errors: Anything given as the second parameter. It's undefined if no value is given.

Throwlhos as an express middleware

You can use throwlhos as an express middleware:

app.use(throwlhos.middlware)

Since throwlhos overwrites Express interface, you can find throwlhos err_* methods directly in express response!

Consider the following code which is an express middlware:

import throwlhos from 'throwlhos'
import { Request, Response } from 'express'

class FooBarController {
  async index(request: Request, response: Response) {
    const throwlhos = response.err_internalServerError()
    return response.status(throwlhos.code).send(throwlhos)
  }
}

Outputs:

HTTP/1.1 500 INTERNAL_SERVER_ERROR
X-Powered-By: Express
errors-Type: application/json; charset=utf-8
{
  code: 500,
  status: 'INTERNAL_SERVER_ERROR',
  message: 'Internal Server Error'
} 

Usage with an express Error Handler (recommended)

If you want to quickly send an error response with your throwlhos use it with responserror.

Responserror handler will catch-all errors from any express middleware router in-between by using next(err) .

Full example:

  import throwlhos from 'throwlhos'
  import errorHandler from 'responserror'
  const app = express()
  const router = express.Router()
  router.post('/resources', (_, response: Response, next: NextFunction) => {
    try {
      throw response.err_forbidden('Access denied.. Sorry')
    } catch(err) {
      return next(err)
    }
  })
  app.use(throwlhos.middlware)
  app.use(router)
  app.use(errorHandler)

POST /resources outputs:

HTTP/1.1 403 FORBIDDEN
X-Powered-By: Express
errors-Type: application/json; charset=utf-8
{
  code: 403,
  status: 'FORBIDDEN',
  message: 'Access denied.. Sorry',
  success: false
}

Available Methods

Throwlhos currently supports following methods:

err_multipleChoices // Multiple Choices
err_movedPermanently // Moved Permanently
err_movedTemporarily // Moved Temporarily
err_seeOther // See Other
err_notModified // Not Modified
err_useProxy // Use Proxy
err_temporaryRedirect // Temporary Redirect
err_permanentRedirect // Permanent Redirect
err_badRequest // Bad Request
err_unauthorized // Unauthorized
err_paymentRequired // Payment Required
err_forbidden // Forbidden
err_notFound // Not Found
err_methodNotAllowed // Method Not Allowed
err_notAcceptable // Not Acceptable
err_proxyAuthenticationRequired // Proxy Authentication Required
err_requestTimeout // Request Timeout
err_conflict // Conflict
err_gone // Gone
err_lengthRequired // Length Required
err_preconditionFailed // Precondition Failed
err_requestTooLong // Request Entity Too Large
err_requestUriTooLong // Request-URI Too Long
err_unsupportedMediaType // Unsupported Media Type
err_requestedRangeNotSatisfiable // Requested Range Not Satisfiable
err_expectationFailed // Expectation Failed
err_imATeapot // I'm a teapot
err_insufficientSpaceOnResource // Insufficient Space on Resource
err_methodFailure // Method Failure
err_misdirectedRequest // Misdirected Request
err_unprocessableEntity // Unprocessable Entity
err_locked // Locked
err_failedDependency // Failed Dependency
err_preconditionRequired // Precondition Required
err_tooManyRequests // Too Many Requests
err_requestHeaderFieldsTooLarge // Request Header Fields Too Large
err_unavailableForLegalReasons // Unavailable For Legal Reasons
err_internalServerError // Internal Server Error
err_notImplemented // Not Implemented
err_badGateway // Bad Gateway
err_serviceUnavailable // Service Unavailable
err_gatewayTimeout // Gateway Timeout
err_httpVersionNotSupported // HTTP Version Not Supported
err_insufficientStorage // Insufficient Storage
err_networkAuthenticationRequired // Network Authentication Required
err_custom // Custom Error (provide message, code and errors)

More

Special thanks to my fellow engineer Estanis as his words where my inspiration in the naming of the package.

Testing

Run the test suit with yarn test.

Contributing

If you want to contribute in any of theses ways:

  • Give your ideas or feedback
  • Question something
  • Point out a problem or issue
  • Enhance the code or its documentation
  • Help in any other way

You can (and should) open an issue or even a pull request.

Has this package been useful for you?

If so, you can contribute by giving it a Star ⭐ at the GitHub Repository!

Thanks for your interest in contributing to this repo!

Author

Luiz Felipe Zarco (felipezarco@hotmail.com)

License

This code is licensed under the MIT License. See the LICENSE.md file for more info.

About

Throw error objects directly from express response

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published