From c1d7077061a7dcfb5a0ad8b7a863523090a17922 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Mon, 25 Mar 2019 13:19:20 +0800 Subject: [PATCH] packages/server: Return validation errors as JSON --- packages/server/src/middleware/ErrorApiHandler.ts | 15 +++++++++++++-- packages/server/src/validator/ValidationError.ts | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/server/src/middleware/ErrorApiHandler.ts b/packages/server/src/middleware/ErrorApiHandler.ts index 48ce70f..275e14c 100644 --- a/packages/server/src/middleware/ErrorApiHandler.ts +++ b/packages/server/src/middleware/ErrorApiHandler.ts @@ -1,6 +1,7 @@ -import {IMiddleware} from './IMiddleware' import {IErrorHandler} from './IErrorHandler' import {ILogger} from '../logger/ILogger' +import {IMiddleware} from './IMiddleware' +import {ValidationError} from '../validator' export class ErrorApiHandler implements IMiddleware { constructor(readonly logger: ILogger) {} @@ -10,7 +11,17 @@ export class ErrorApiHandler implements IMiddleware { req.correlationId, err.stack) const statusCode = this.getStatus(err) res.status(statusCode) - res.end('An error occurred') + if (err instanceof ValidationError) { + res.json({ + error: err.message, + errors: err.errors, + }) + return + } + res.json({ + error: 'An error occurred', + errors: [], + }) } protected getStatus(err: Error): number { diff --git a/packages/server/src/validator/ValidationError.ts b/packages/server/src/validator/ValidationError.ts index 27aab28..d310f55 100644 --- a/packages/server/src/validator/ValidationError.ts +++ b/packages/server/src/validator/ValidationError.ts @@ -5,6 +5,7 @@ export class ValidationError extends Error { constructor( readonly errors: IValidationMessage[], message?: string, + readonly status: number = 400, ) { super( message