npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

houston-errors

v1.1.0

Published

The Houston creates http errors (is also used to create custom errors) by node application. It is centralized all errors in a function, making easy to handle errors

Downloads

66

Readme

Houston-Errors, "we have a problem"

The Houston creates and returns a JavaScript Error, uses http errors and makes easy to add informations on it. (for while just in 400x, 500x, but you can create custom errors). All errors uses the same function called DefaultError which centralizes everything, that way makes easy handling errors. Also have an option to get default http errors objects by name, and from it get name, string and code. All errors are logged, and the best part is freedom to listen all errors and handle them by HoustonErrorEvents. It also have some integrations such as Sequelize.

Code style: airbnb node (scoped with tag) Jest coverage

Example of application (piece found over web)

app.get('/users/:id', (req, res) => {
  const userId = req.params.id
  if (!userId) {
    return res.sendStatus(400).json({
      error: 'Missing id'
    })
  }

  Users.get(userId, (err, user) => {
    if (err) {
      return res.sendStatus(500).json(err)
    }

    res.send(users)
  })
})

Using Houston

const { BadRequest } = require('houston-errors).houstonClientErrors;
const { InternalServerError } = require('houston-errors).houstonServerErrors;
app.get('/users/:id', (req, res) => {
  try {
	const userId = req.params.id
	if (!userId) { BadRequest({ message: 'Missing id' }); }
	Users.get(userId, (err, user) => {
	if (err) { InternalServerError({ data: err }); }
	res.send(users);
  } catch (error) {
      return res.sendStatus(error.code).json(error)
  }

Houston-Errors

All function listed above use on of DefaultError from houston-errors.

DefaultError(houstonError, [optionals])

It will create a JS Error object, add name, code, error and the optionals (message, data). All the functions will returns the DefaultError.

  • houstonError - Objects which can ben found in in houstonClientErrors, houstonServerErrors.
  • optionals - optional object where:
    • message is a custom message which will be show in error.
    • data - additional error information (it can be object or string).

Usage Example

    const { DefaultError } = require('houston-errors').houston;
    const { BAD_REQUEST } = require('houston-errors').houstonClientErrors;
    const sendMessage = 'This is Houston. Say again, please';
    DefaultError(BAD_REQUEST, {
        message: sendMessage,
        data: '{Lousma: houston, we have a problem.}',
    });

CustomError([optionals])

It is also possible create your custom errors setting things like code, error, name, message and data.

  • optionals - optional object where:
    • code is the code of error (default: 500).
    • error is the error type (default: Internal Server Error).
    • name the name of error (default: INTERNAL_SERVER_ERROR).
    • message is a custom message (default: if not defined it will be removed of object).
    • data - additional error information (it can be object or string, default: if not defined it will be removed of object).

Usage Example

    const { CustomError } = require('houston-errors').houston;
    const sendMessage = 'This is Houston. Say again, please';
    const lovellData = {lovell: 'We have had a MAIN B BUS UNDERVOLT'};
    const errorDef = 'houston, we have a problem';
    CustomError({
        code: 406,
        error: errorDef,
        name:'Lousma',
        message: sendMessage,
        data: lovellData,
    });

HoustonErrorEvents

You can also listen the HoustonErrorEvents which will emit all houstonError by the event 'weHaveAProblem' then handle it for whatever you want for a better custom application.

Usage Example

    const { HoustonErrorEvent } = require('houston-errors').houston;

    HoustonErrorEvent.on('weHaveAProblem', (error) => {
      //..code
    });

HoustonClientErrors

It is possible to import the the client errors by the name bellow and you get get any of them. They are an object with code, string and name.

Code | String | Name --- | --- | --- 400 | Bad Request | BAD_REQUEST 401 | Unauthorized | UNAUTHORIZED 402 | Payment Required | PAYMENT_REQUIRED 403 | Forbidden | FORBIDDEN 404 | Not Found | NOT_FOUND 405 | Method Not Allowed | METHOD_NOT_ALLOWED 406 | Not Acceptable | NOT_ACCEPTABLE 407 | Proxy Authentication Required | PROXY_AUTHENTICATION_REQUIRED 408 | Request Timeout | REQUEST_TIMEOUT 409 | Conflict | CONFLICT 410 | Gone | GONE 411 | Length Required | LENGTH_REQUIRED 412 | Precondition Failed | PRECONDITION_FAILED 413 | Payload Too Large | PAYLOAD_TOO_LARGE 414 | Uri Too long | URI_TOO_LONG 415 | Unsupported Media Type | UNSUPPORTED_MEDIA_TYPE 416 | Range Not Satisfiable | RANGE_NOT_SATISFIABLE 417 | Expectation Failed | EXPECTATION_FAILED 418 | Im a Teapot | IM_A_TEAPOT 421 | Misdirected Request | MISDIRECTED_REQUEST 422 | Unprocessable Entity | UNPROCESSABLE_ENTITY 423 | Locked | LOCKED 424 | Failed Dependency | FAILED_DEPENDENCY 425 | Unordered Collection | UNORDERED_COLLECTION 426 | Upgrade Required | UPGRADE_REQUIRED 428 | Precondition Required | PRECONDITION_REQUIRED 429 | Too Many Requests | TOO_MANY_REQUESTS 431 | Request Header Fields Too Large | REQUEST_HEADER_FIELDS_TOO_LARGE 451 | Unavailable for Legal Reqsons | UNAVAILABLE_FOR_LEGAL_REASONS

Usage example

  const { NOT_FOUND } = require('houston-errors').houstonClientErrors;
  console.log(`code: ${NOT_FOUND.code}, name: ${NOT_FOUND.name}, error: ${NOT_FOUND.error} `);

It is also possible use functions which returns a JavaScript Error and contains keys like name, error, code, message and data. By default, those methods just returns code, name and error. The available functions are listed bellow.

FunctionName | ---------------------------------------| BadRequest | Unauthorized | PaymentRequired | Forbidden | NotFound | MethodNotAllowed | NotAcceptable | ProxyAuthenticationRequired | RequestTimeout | Conflict | Gone | LengthRequired | PreconditionFailed | PayloadTooLarge | UriTooLong | UnsupportedMediaType | RangeNotSatisfiable | ExpectionFailed | ImATeapot | MisdirectedRequest | UnprocessableEntity | Locked | FailedDependency | UnorderedCollection | UpgradeRequired | PreconditionRequired | TooManyRequests | RequestHeaderFieldsTooLarge | UnavailableForLegalReasons |

All those functions above returns a DefaultError and have the structure like:

FunctionName([optionals])

  • optionals - optional object where:
    • message is a custom message which will be show in error.
    • data - additional error information (it can be object or string).

Usage example

const { NotFound } = require('houston-errors').houstonClientErrors;

try {
    NotFound();
  } catch (error) {
    console.log(error.code)
  }

Setting message and data.

const { NotFound } = require('houston-errors').houstonClientErrors;

try {
    NotFound({message: 'custom message', data: 'some custom object or message'});
  } catch (error) {
    console.log(error.message);
  }

HoustonServerErrors

It is possible to import the the server errors by the name bellow and you get get any of them. They are an object with code, string and name.

Code | String | Name --- | --- | --- 500 | Internal Server Error | INTERNAL_SERVER_ERROR 501 | Not Implemented | NOT_IMPLEMENTED 502 | Bad Gateway | BAD_GATEWAY 503 | Service Unavailable | SERVICE_UNAVAILABLE 504 | Gateway Timeout | GATEWAY_TIMEOUT 505 | HTTP Version Not Supported | HTTP_VERSION_NOT_SUPPORTED 506 | Variant Also Negotiates | VARIANT_ALSO_NEGOTIATES 507 | Insufficient Storage | INSUFFICIENT_STORAGE 508 | Loop Detected | LOOP_DETECTED 509 | Bandwidth Limit Exceeded | BANDWIDTH_LIMIT_EXCEEDED 510 | Not Extended | NOT_EXTENDEED 511 | Network Authentication Required | NETWORK_AUTHENTICATION_REQUIRED

Usage example

  const { INTERNAL_SERVER_ERROR } = require('houston-errors').houstonServerErrors;
  console.log(`code: ${INTERNAL_SERVER_ERROR.code}, name: ${INTERNAL_SERVER_ERROR.name}, error: ${INTERNAL_SERVER_ERROR.error} `);

It is also possible use functions which returns a JavaScript Error and contains keys like name, error, code, message and data. By default, those methods just returns code, name and error. The available functions are listed bellow.

FunctionName | ---------------------------------------| Internal Server Error | Not Implemented | Bad Gateway | Service Unavailable | Gateway Timeout | HTTP Version Not Supported | Variant Also Negotiates | Insufficient Storage | Loop Detected | Bandwidth Limit Exceeded | Not Extended | Network Authentication Required |

All those functions above returns a DefaultError and have the structure like:

FunctionName([optionals])

  • optionals - optional object where:
    • message is a custom message which will be show in error.
    • data - additional error information (it can be object or string).

Usage example

const { InternalServerError } = require('houston-errors').houstonServerErrors;

try {
    InternalServerError();
  } catch (error) {
    console.log(error.code)
  }

Setting message and data.

const { InternalServerError } = require('houston-errors').houstonServerErrors;

try {
    InternalServerError({message: 'custom message', data: 'some custom object or message'});
  } catch (error) {
    console.log(error.message);
  }

Apollo13

It is just an additional function and objects.

Code | String | Name --- | --- | --- 403 | User is not active | USER_NOT_ACTIVE 403 | License is not active | LICENSE_IS_NOT_ACTIVE 403 | Renew license required | RENEW_LICENSE_REQUIRED 401 | No token found | NO_TOKEN 401 | Invalid token | INVALID_TOKEN 401 | Expired token | EXPIRED_TOKEN 406 | Empty required param | EMPTY_REQUIRED_PARAM

SequelizeError

If you use Sequelize, the basic of error will be integrated by function bellow.

FunctionName | ---------------------------------------| SequelizeError |

SequelizeError, Usage Example

const { SequelizeError } = require('houston-errors').apollo13;
// Sequelize Model instance.
const User = require('../db/models/index').users;

try {
function createUser(userParams) {
  try {
    const params = userParams;
    const user = await User.create(params);
    return user;
  } catch (error) {
    // It will create an object Error; You must return if is in different paths.
    return SequelizeError(error);
  }