#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 анимацией ключевого кадра, и это выглядит довольно прилично, безусловно, лучше, чем исходный документ. напишите любопытное поведение