#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 перед вызовом функции и работал как шарм