@teammaestro/node-common
v5.0.0
Published
This repo houses our shared node functions and node handlers
Downloads
9
Keywords
Readme
node-common
This repo houses our shared node functions and node handlers
@TryCatch(optionsOrException = {} as TryCatchOptions | TryCatchException, options = {} as TryCatchOptions )
This decorator will wrap your whole function into a try/catch and you can pass an optional custom error class for it to throw! If you only want to handle the error and not throw an excxeption, you can pass in handleOnly: true
. When using this option, it will emit an event with the error through the TryCatchEmitter, which you should use to listen and handle these errors in your application. If you want to sanitize the error itself, like in case of taking unecessary propereties off of it, you can pass in a class that accepts an error as a parameter to errorWrapperClass
or even have that class be the first parameter
// Main file, right after bootstrap of application **caught error will be handled here**
import { TryCatchEmitter } from '@teamhive/node-common';
// This will setup any baseExceptions that may get thrown that you dont want to wrap with the wrapping class
TryCatchEmitter.baseException = [MyBaseException, HttpException];
TryCatchEmitter.listen((error) => errorHandler.captureException(error));
// Options interface
interface TryCatchOptions {
handleOnly?: boolean;
customResponseMessage?: string;
errorWrapperClass?: { new (param1: Error) };
isSynchronous?: boolean;
}
// Only pass in exception (this will throw an SqlException)
@TryCatch(SqlException)
async fetchAll() {
return await this.usersRepository.fetchAll()
}
OR
// Only pass in options (this will not throw but only report the SqlExceptionError)
@TryCatch({ handleOnly: true, errorWrapperClass: SqlExceptionError })
async fetchAll() {
return await this.usersRepository.fetchAll()
}
OR
// Pass in exception with options
@TryCatch(SqlException, { handleOnly: true, customResponseMessage: 'error creating content' })
async fetchAll() {
return await this.usersRepository.fetchAll()
}
NodeEventHandler
This statis class is designed to help you catch unhandled promise rejections and uncaught exceptions from the highest node process event listeners. You can als pass in a function to handle these exceptions gracefully.
At the very beginning in your index file you should setup our very basic event listeners
'use strict'
// setup uncaught exception handling
try {
const NodeEventHandler = require('@teamhive/node-common').NodeEventHandler;
NodeEventHandler.logUncaughtException();
NodeEventHandler.logUnhandleRejection();
} catch (error) {
console.error('ERROR SETTING UP EVENT HANDLER: ' + error);
process.exit(1);
}
// start application
require('./dist/main');
Once your app bootstraps and you have access to your error handler, you can pass that to it
import { NodeEventHandler } from '@teamhive/node-common';
// Get you errorHandler our of Reflector or whereever it is constructed
NodeEventHandler.handleUnhandledRejection(errorHandler);
NodeEventHandler.handleUncaughtException(errorHandler);
Distribution
npm pack
npm version (major|minor|patch)
npm publish
Note: This will also automatically push changes and tags post-publish