Я использую nodejs, ejs, express и express-validator. Я пытаюсь использовать экспресс-валидатор на моей странице регистрации (регистрация, ejs). Экспресс-валидатор генерирует ошибки в массиве объектов. Когда я console.log результатов (в VAR ошибки) я получаю:
formatter: [Function: formatter],
errors:
[ { value: 'kl',
msg: 'Username must be between 4 and 15 characters.',
param: 'username',
location: 'body' },
{ value: 'kl',
msg: 'Password must be between 8 and 100 characters.',
param: 'password',
location: 'body' },
{ value: 'klsdflksdf',
msg: 'Passwords must match.',
param: 'confirmPassword',
location: 'body' } ] }
Когда я пытаюсь выполнить итерацию массива на странице просмотра (signup.ejs) с помощью For Of, я получаю ошибку, что err не повторяется. Когда я использую For In (как показано ниже), в результате на странице просмотра отображаются два элемента. первый - Fromatoer, а второй - ошибки. Как мне получить сообщение msg: valuse? замена на <% errors.msg%> ничего не дает на странице просмотров.
Вот моя страница просмотров:
<%- include('includes/navigation.ejs') %>
<% if (typeof errors !== "undefined") { %>
<p>there are errors on page</p>
<% for(const error in errors) { %>
<div class="alert alert-warning">
<li> <%= error %> </li>
</div>
<% } %>
<% } %>
<div class="container">
<form class="signup-form" action="/signup" method="POST">
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Enter username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="Password">
</div>
<div class="form-group">
<label for="confirmPassword">Confirm Password</label>
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword"
placeholder="Confirm Password">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
Вот мой контроллер:
exports.postSignup = [
check('username', 'Username field must not be empty.').not().isEmpty(),
check('username', 'Username must be between 4 and 15 characters.').isLength(4, 15),
check('password', 'Password must be between 8 and 100 characters.').isLength(8, 100),
check('confirmPassword', 'Passwords must match.').equals('password'),
(req, res, next) => {
const username = req.body.username;
const password = req.body.password;
const confirmPassword = req.body.confirmPassword;
const errors = validationResult(req);
if (errors) {
console.log(errors);
res.render('signup', {
pageTitle: 'Registration Error',
errors: errors
});
} else {
User.create({
username: req.body.username,
password: req.body.password
})
.then(result => {
res.render('login', { pageTitle: "Signup Successfull" });
})
.catch(err => console.log(err));
};
}
];