feat: add flag for default error handler

Signed-off-by: Radoslaw Wielonski <radoslaw.wielonski@nordcloud.com>
This commit is contained in:
Radoslaw Wielonski
2021-12-07 11:35:08 +01:00
parent f0064d4ee3
commit 5a59f5507e
3 changed files with 24 additions and 2 deletions
@@ -40,11 +40,12 @@ describe('ServiceBuilderImpl', () => {
const serviceBuilder = new ServiceBuilderImpl(module);
const customErrorHandler = (
error: Error,
// @ts-ignore
req: Request,
// @ts-ignore
res: Response,
next: NextFunction,
) => {
console.log(req, res);
next(error);
};
serviceBuilder.setErrorHandler(customErrorHandler);
@@ -67,6 +67,7 @@ export class ServiceBuilderImpl implements ServiceBuilder {
private routers: [string, Router][];
private requestLoggingHandler: RequestLoggingHandlerFactory | undefined;
private errorHandler: ErrorRequestHandler | undefined;
private useDefaultErrorHandler: boolean;
// Reference to the module where builder is created - needed for hot module
// reloading
private module: NodeModule;
@@ -74,6 +75,7 @@ export class ServiceBuilderImpl implements ServiceBuilder {
constructor(moduleRef: NodeModule) {
this.routers = [];
this.module = moduleRef;
this.useDefaultErrorHandler = true;
}
loadConfig(config: Config): ServiceBuilder {
@@ -158,6 +160,11 @@ export class ServiceBuilderImpl implements ServiceBuilder {
return this;
}
disableDefaultErrorHandler() {
this.useDefaultErrorHandler = false;
return this;
}
async start(): Promise<http.Server> {
const app = express();
const { port, host, logger, corsOptions, httpsSettings, helmetOptions } =
@@ -175,7 +182,14 @@ export class ServiceBuilderImpl implements ServiceBuilder {
app.use(root, route);
}
app.use(notFoundHandler());
app.use(this.errorHandler ?? defaultErrorHandler());
if (this.errorHandler) {
app.use(this.errorHandler);
}
if (this.useDefaultErrorHandler) {
app.use(defaultErrorHandler());
}
const server: http.Server = httpsSettings
? await createHttpsServer(app, httpsSettings, logger)
@@ -107,6 +107,13 @@ export type ServiceBuilder = {
*/
setErrorHandler(errorHandler: ErrorRequestHandler): ServiceBuilder;
/**
* Disable default error handler
*
* If it's not called, default error handler is used
*/
disableDefaultErrorHandler(): ServiceBuilder;
/**
* Starts the server using the given settings.
*/