34 lines
867 B
TypeScript
34 lines
867 B
TypeScript
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) {}
|
|
|
|
handle: IErrorHandler = (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
|
|
}
|
|
}
|