По сути, валидатор пытается сообщить вам, где, по его мнению, он обнаружил ошибку, и поскольку у него нет пользовательских строк ошибок, он использует (довольно некрасивую) схему «элемент / местоположение».
Подход 1
Наиболее разумным способом было бы иметь настраиваемое сообщение об ошибке для каждого поля.Видя, что сообщения об ошибках являются довольно повторяющимися, имело бы смысл вывести их из определения валидатора и, возможно, создать очень простую функцию «получения», которая выполняла бы некоторые базовые шаблоны.Затем ваш код становится немного лучше:
const MSG_TYPE_STR = '{{field}} must be of type string.'
function getMessage(fieldName: string, msgID: string): string {
// Templating magic happens here, Regex or whatever other method you prefer
}
...
body('username')
.isString()
.withMessage(getMessage('username', MSG_TYPE_STR)
....
Таким образом, вы все равно будете получать красиво отформатированные сообщения об ошибках, и вам не придется копировать и вставлять одну и ту же строку снова и снова
Подход 2
Вы могли бы предположительно добавить постобработку к ошибке валидации (т.е. взять уродливый вывод и сделать некоторые вычисления и преобразовать его в более хороший вывод).Это был бы значительно более сложный подход, так как вам пришлось бы разбить правила на атомарные проверки, и ваша схема проверки стала очень длинной, и все же это довольно трудоемкий
подход 3
Это не столько «подход», сколько предложение - вы можете переключиться на другой валидатор, например, Joi, который имеет гораздо более разумную логику по умолчанию для сообщений об ошибках