Перевод сообщения об ошибке проверки класса с использованием библиотеки i18n в проекте NestJS

#node.js #error-handling #nestjs #angular-i18n #class-validator

#node.js #обработка ошибок #nestjs #angular-i18n #класс-валидатор

Вопрос:

 import {
  Catch,
  HttpException,
  ExceptionFilter,
  ArgumentsHost,
} from "@nestjs/common";
import { Response } from "express";
import { ResponseError } from "../common/dto/ResponseDto";
import { I18nService } from "nestjs-i18n";


@Catch(HttpException)
export class ExceptionResponseFilter implements ExceptionFilter {

  constructor(
    private readonly _i18n: I18nService
) {}
async msg_validation(msg_key: string): Promise<string> {
    const validation = await this._i18n.translate(
        "translations.validation_messages." msg_key,
        {
            lang: "en",
        }
    );
    return validation;
   }

  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const status = exception.getStatus();
    const r = <any>exception.getResponse();

    let message: string;
    if (exception.message) {
      console.log(r);
      message = typeof r.message == "string" ? r.message : this.msg_validation(r.message[0]);
    } else {
      message = `Unknown error occured!`;
    }
    response.status(status).send(new ResponseError(message, null, status));
  }
}
  

это часть обработки ошибок, и я пытаюсь перевести сообщение об ошибке через массив переводов i18N

это часть dto

 @IsNotEmpty({message: "IsNotEmpty"})
    @ApiProperty()
    readonly firstName: string;
  

и это строка json перевода

 {
    "keywords": {
        "admin": "Administrator"
    },
    
    "validation_messages": {
            "IsString": "Should be a String",
            "IsNotEmpty": "Should not be Empty",
            "IsUnique": "Already Exists",
            "MaxLength": "Should not be Greater than",
            "MinLength": "Should not be Less than",
            "IsNumberString": "Should not Contain Alphabets or Special Characters",
            "IsPhoneNumber": "Should be a Valid Phone Number",
            "IsAlpha": "SHould not Contain Numbers or Special Symbols",
            "IsEmail": "Should be a Valid Emial Format"
        }
    
}
  

сообщение, которое я возвращаю в консоль в этом конкретном случае, совпадает с ключом, который я передаю
«IsNotEmpty»

Что я делаю не так

Ответ №1:

Неважно, я решил это. На самом деле проблема заключалась в том, что я передавал значение асинхронной функции msg_validation в функцию синхронизации, я также сделал catch асинхронным и добавил метод await перед вызовом функции и работал как шарм