TS.Ed (Express) глобальный обработчик ошибок BadRequest
Бэкенд приложения написан на typescript на фреймворке TS.Ed, в классе User.ts есть метод верификации токена:
static getPartsByToken(token: string): { id: number; email: string } {
try {
const verifiedToken = jsonwebtoken.verify(token, Config.jwtSecret);
return <{ id: number; email: string }>verifiedToken;
} catch (error) {
throw new BadRequest(`BAD TOKEN`, error);
}
}
Для логирования ошибок используется фильтр, как указан в доке к TS.Ed:
import {
Catch,
PlatformContext,
ExceptionFilterMethods,
ResponseErrorObject,
} from "@tsed/common";
import { Exception } from "@tsed/exceptions";
import { $log } from "@tsed/common";
@Catch(Exception)
export class HttpExceptionFilter implements ExceptionFilterMethods {
catch(exception: Exception, ctx: PlatformContext) {
const { response, logger } = ctx;
const error = this.mapError(exception);
const headers = this.getHeaders(exception);
$log.error("GOT EXCEPTION:", error);
response.setHeaders(headers).status(error.status).body(error);
}
mapError(error: any) {
return {
name: error.origin?.name || error.name,
message: error.message,
status: error.status || 500,
errors: this.getErrors(error),
};
}
protected getErrors(error: any) {
return [error, error.origin]
.filter(Boolean)
.reduce((errs, { errors }: ResponseErrorObject) => {
return [...errs, ...(errors || [])];
}, []);
}
protected getHeaders(error: any) {
return [error, error.origin]
.filter(Boolean)
.reduce((obj, { headers }: ResponseErrorObject) => {
return {
...obj,
...(headers || {}),
};
}, {});
}
}
При провале функции jsonwebtoken.verify вызывает ошибку JsonWebTokenError: jwt malformed и сервер падает, в лог ошибка не попадает. Как избежать падения сервера? Вопрос даже не в jsonwebtoken.verify, а как вообще исключить вариант полного падения сервера?