gpt4 book ai didi

mysql - 在使用 node express 和 ejs 的 html 页面上显示 express 验证器生成的错误时遇到问题

转载 作者:行者123 更新时间:2023-11-30 21:27:14 25 4
gpt4 key购买 nike

我正在使用 nodejs、ejs、express 和 express-validator。我正在尝试在我的注册页面(注册,ejs)上使用快速验证器。 Express-validator 在对象数组中生成错误。当我 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' } ] }

当我尝试使用 For Of 在我的 View 页面 (signup.ejs) 上迭代数组时,我得到错误信息 err is not iterable。当我使用 For In(如下所示)时,结果是在我的 View 页面上显示了两个项目。第一个是 Fromatoer,第二个是错误。我如何获得 msg: valuse 显示?替换为 <% errors.msg %> 不会在 View 页面上生成任何内容。

这是我的观点页面:

    <%- 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>

这是我的 Controller :

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));
};
}
];

最佳答案

检查是否存在任何验证错误的方式应该有所不同。在这行代码之后,您不会获得可迭代数组。

const errors = validationResult(req);

您需要使用isEmpty() 方法来检查是否存在错误;和 array() 方法将 errors 转换为可迭代数组。通常错误处理程序如下所示:

const errorHandler = (req, res, next) => {
let errors = validationResult(req);
if (!errors.isEmpty()) {
errors = errors.array();
// some other stuff
} else next();
};

来源:express-validator docs

关于mysql - 在使用 node express 和 ejs 的 html 页面上显示 express 验证器生成的错误时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58330910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com