JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1179
  • Score
    100M100P100Q99471F
  • License ISC

Package Exports

  • oops-error

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (oops-error) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Errors

It is recommended in nodejs to divide all error in to two categories: Operational errors and programmer errors https://www.joyent.com/node-js/production/design/errors

Programmer errors

Programmer errors are bugs in the program. These are things that can always be avoided by changing the code. They can never be handled properly (since by definition the code in question is broken). Examples:

  • tried to read property of "undefined"
  • called an asynchronous function without a callback
  • passed a "string" where an object was expected
  • passed an object where an IP address string was expected

When a programmer error occurs the error is given an id, it is logged and the error id is delivered to the client. This is because we don't want to expose any information about the system to the client. The best way to recover from programmer errors is to crash immediately.

Operational errors

Operational errors represent run-time problems experienced by correctly-written programs. These are not bugs in the program. In fact, these are usually problems with the system itself. Examples include:

  • failed to connect to server
  • failed to resolve hostname
  • invalid user input
  • request timeout
  • server returned a 500 response
  • socket hang-up
  • system is out of memory
  • data from some datasource is missing or not as expected

We divide operational errors into two categories: User errors and System error

User errors

This is allways invalid user input. In this case we want to tell the user what he did wrong. This is done be throwing an Oops instance with some context. Example:

import { Oops } from 'oops-error'

export const sendEmail = (email) => {
    if(!isValidEmail(email)) {
        throw new Oops({
            message: 'invalid email',
            category: 'UserError',
            context: {
                email,
            },
        })
    }
    ...
}

System errors

For promise chains we use handling functions in our catch clauses. The error should only expose an error id to the client. Example:

import { programmerErrorHandler } from 'oops-error'

...
export const doSomething = (params) => {
    somePromiseFunction().catch(programmerErrorHandler('failed to do something', {params}))
}
...