34 lines
867 B
TypeScript

import {TErrorHandler} from './TErrorHandler'
import {ILogger} from '../logger/ILogger'
import {IMiddleware} from './IMiddleware'
import {ValidationError} from '../validator'
export class ErrorApiHandler implements IMiddleware {
constructor(readonly logger: ILogger) {}
handle: TErrorHandler = (err, req, res, next) => {
this.logger.error('%s An API error occurred: %s',
req.correlationId, err.stack)
const statusCode = this.getStatus(err)
res.status(statusCode)
if (ValidationError.isInstanceOf(err)) {
res.json({
error: err.message,
errors: err.errors,
})
return
}
res.json({
error: 'An error occurred',
errors: [],
})
}
protected getStatus(err: Error): number {
if (typeof (err as any).status === 'number') {
return (err as any).status
}
return 500
}
}