Как отобразить сообщение об ошибке, сгенерированное экспресс-валидатором, в удобном формате

#javascript #node.js #express

#javascript #node.js #экспресс

Вопрос:

Передача ошибок экспресс-валидатора немного сырая и дает не слишком эстетичные результаты

     return res.status(422).json({ error: error.array() });
 

Вышеизложенное будет просто равно document.write() и не оставит на экране ничего, кроме следующего сообщения. «{«ошибка»: [«неверный адрес электронной почты», «ваш пароль должен иметь минимальную и максимальную длину от 8 до 15″,»ваш пароль должен содержать хотя бы одно число»,»ваш пароль должен содержать хотя бы один отдельный символ»]} »

Консоль возвращает объект ошибки следующим образом:

  {
 error: [
'your password should have min and max length between 8-15',
'your password should have at least one number',
'your password should have at least one sepcial character'
]
}
 

Я пробовал

 // const failMsg = JSON.parse("{ error: error.array() }");
if (hasError) {
//req.session.error = `{failMsg}`;
 

Не работает. Я бы предпочел встроить сообщение об ошибке в

  • или элемент с помощью экспресс-шаблонов. Нравится
             <% if(err) { %>
            <p id="errorAlert" style="color: red;"><%= err %></p>
            <%} %> 
     

    Или просто, как я могу этот объект ошибки в виде обычного текста?

  • Ответ №1:

    Проведя некоторое время в консоли …… я нашел решение, возможно, какая-то другая бедная душа попытается найти это в документах безрезультатно, поэтому может быть полезно поделиться ответом, потому что то, что есть в Интернете или в документах, невозможно развернутьв производство.

     const error = validationResult(req).formatWith(({ msg }) => msg);
    // check for errors
    const hasError = !error.isEmpty();
    
    if (hasError) {
    /// if error object is not empty
    var failMsg = { error: error.array() }; // this is what is returned by validator
    var arrOfErrors = failMsg.error;  // the errors will be in this array
    var errors2display = [];           // init array for errors to be displayed to user
    for(let i = 0; i < arrOfErrors.length ; i  ){
    errors2display.push(arrOfErrors[i]   "💩") }    // loop through and push whatever is there
    
     var oneStep = errors2display;
     req.session.error = `${oneStep}`;  // this is the express-session middleware but it does not matter.
     return res.redirect("/register");   
    
     }
     

    И в представлении

             <% if(err) { %>
            <p id="errorAlert" style="color: red;"><%= err %></p>
            <%} %>
     

    Это с некоторыми хорошими модальными CSS анимацией ключевого кадра, и это выглядит довольно прилично, безусловно, лучше, чем исходный документ. напишите любопытное поведение