https://github.com/aliencreations/node-error
Error codes, and a custom error function for Alien Creations node apps.
https://github.com/aliencreations/node-error
Last synced: 6 months ago
JSON representation
Error codes, and a custom error function for Alien Creations node apps.
- Host: GitHub
- URL: https://github.com/aliencreations/node-error
- Owner: AlienCreations
- Created: 2020-11-06T14:01:30.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-12-11T03:50:00.000Z (about 2 years ago)
- Last Synced: 2025-05-11T00:58:07.821Z (9 months ago)
- Language: JavaScript
- Size: 52.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# node-error
Error codes, and a custom error function for Alien Creations node apps.
## Install
```
$ yarn add @aliencreations/node-error
```
## API
### error
Custom error function which allows injection of metadata into an object of type `Error`. Simply invoke with
an object containing any metadata you wish to make it to the logs. Preserves the stacktrace.
### errors
Dictionary of error codes and messages for various parts of the Alien Creations NodeJS suite of apps. This
is to be considered the source of truth for _all_ error codes from 2020 onward.
## Usage
### Basic Usage
```js
const { error, errors } = require('@aliencreations/node-error')
const { FORBIDDEN_API_ACCESS } = errors.auth;
if (someCondition) {
throw error(FORBIDDEN_API_ACCESS());
}
```
console.log(err):
```
{ Error: Permission denied
at error ...
at runCallback (timers.js:705:18)
code: 5004,
statusCode: 403,
isInternalError: true,
message: 'Permission denied',
debug: { internalMessage: 'Forbidden API access' } }
```
The `errors parameter` is optional. If `errors` isn't used, the Error created will be a standard Error object with the parameters object merged in.
### Overriding Default Values
You can also override any default values by passing in parameters.
```
const err = error(
errors.auth.FORBIDDEN_API_ACCESS({
message: 'custom message',
debug: { internalMessage: 'My internal message', otherProp: 'value' },
statusCode: 400
})
)
```
console.log(err):
```
{ Error: custom message
at error ...
at runCallback (timers.js:705:18)
code: 5004,
statusCode: 400,
isInternalError: true,
message: 'custom message',
debug:
{ internalMessage: 'My internal message', otherProp: 'value' } }
```
The `message` property should always be safe to display to the user.
The `messageContext` property is optional and, if present, is concatenated to the `message` with a colon.
The `debug` property object contains additional information that should only be available to services on the back end or to all users in development,
demo, or test environments, but never to front end users in production. The `debug` property can be removed in a root error handler (e.g., Express
error handler middleware or AWS Lambda catch statement at the end of the handler) when necessary.
To remove the `debug` property: `R.omit(['debug'], err)`
The `isInternalError` property is `true` for all errors created by our apps, as long as this package generates the Errors.
Errors generated by third party libraries and services will not have this property set. In a root error handler, you can check for the
presence of `isInternalError` to decide if it is safe to serialize the Error's own properties as is and return it to the user, or whether a new
Error should be created with wraps this error. When wrapping a third party Error, use `error.system.UNCAUGHT`.
Note that when serializing an Error message, the `stack` property should be removed, at least for all front end production users.
When creating a new Error, if you want to wrap an existing Error, you should add it to the `debug.originalError` property.
```
const originalError = new Error('Some third Party library Error')
const err = error(
errors.auth.TOKEN_EXPIRED({
message: 'override message4',
debug: { prop3: 'value3', prop0: 'newvalue', internalMessage: 'Custom Internal Message', originalError }
}),
)
```
console.log(err):
```
{ Error: override message4
at error ...
at runCallback (timers.js:705:18)
code: 5003,
statusCode: 401,
isInternalError: true,
message: 'override message4',
debug:
{ internalMessage: 'Custom Internal Message',
prop3: 'value3',
prop0: 'newvalue',
originalError:
Error: Some third Party library Error
at UserContext.fit ...
at processImmediate (timers.js:658:5) } }
```
You can add any additional details to `debug` for developers to read. For additional human-readable details, add them to `debug.internalMessage`.
If `internalMessage` is populated in the configuration, it will be overridden by the value passed in the `error` function.
## Changelog
##### 1.0.0
- Initial commit
##### 1.0.1
- Update dependencies
##### 1.0.3
- Update README
##### 1.0.3
- Fix `isInternalError` typo