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, а как вообще исключить вариант полного падения сервера?


Ответы (0 шт):