express-validator 不呈现错误前端
express-validator not rendering errors frontend
我目前正在使用 nodejs,我有 passportjs 设置,我正在尝试为注册表单设置一些验证。
这是我目前拥有的,
路线
// Register :post
router.post('/dashboard/register',
body('firstname').notEmpty().withMessage('First name is required'),
body('lastname').notEmpty().withMessage('Last name is required'),
body('username').notEmpty().withMessage('Username is required'),
body('email').notEmpty().withMessage('An account email is required'),
body('email').isEmail().withMessage('This account email is not valid'),
body('password').notEmpty().withMessage('An account password is required'),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.render('dashboard/register', {
errors: errors
});
} else {
var newUser = new User({
firstname: req.body.firstname,
lastname: req.body.lastname,
username: req.body.username,
email: req.body.email,
password: req.body.password
});
User.createUser(newUser, function(err, user) {
if(err) throw err;
console.log(user);
});
};
});
查看
{{#if errors}}
<div class="alert alert-danger">
{{#each errors}}
<li>{{msg}}</li>
{{/each}}
</div>
{{/if}}
当我触发错误时,我得到了这个
但是,如果我尝试
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
} else {
...
};
我得到以下内容
{"errors":[{"value":"","msg":"First name is required","param":"firstname","location":"body"},{"value":"","msg":"Last name is required","param":"lastname","location":"body"},{"value":"","msg":"Username is required","param":"username","location":"body"},{"value":"","msg":"An account email is required","param":"email","location":"body"},{"value":"","msg":"This account email is not valid","param":"email","location":"body"},{"value":"","msg":"An account password is required","param":"password","location":"body"}]}
我不确定哪里出错了,我导入了 express-validator,所以对我来说它似乎没有捕获错误。
您没有将数组传递给渲染函数,使用 .array()
就像您在打印时所做的那样 JSON:
const errors = validationResult(req); // this is returning Result object, not array
if (!errors.isEmpty()) {
res.render('dashboard/register', {
errors: errors.array() // convert Result to array so it can be rendered
});
}
如果不使用 .array()
,Result
对象将被传递到您的模板中,并且无法呈现。
我目前正在使用 nodejs,我有 passportjs 设置,我正在尝试为注册表单设置一些验证。
这是我目前拥有的,
路线
// Register :post
router.post('/dashboard/register',
body('firstname').notEmpty().withMessage('First name is required'),
body('lastname').notEmpty().withMessage('Last name is required'),
body('username').notEmpty().withMessage('Username is required'),
body('email').notEmpty().withMessage('An account email is required'),
body('email').isEmail().withMessage('This account email is not valid'),
body('password').notEmpty().withMessage('An account password is required'),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.render('dashboard/register', {
errors: errors
});
} else {
var newUser = new User({
firstname: req.body.firstname,
lastname: req.body.lastname,
username: req.body.username,
email: req.body.email,
password: req.body.password
});
User.createUser(newUser, function(err, user) {
if(err) throw err;
console.log(user);
});
};
});
查看
{{#if errors}}
<div class="alert alert-danger">
{{#each errors}}
<li>{{msg}}</li>
{{/each}}
</div>
{{/if}}
当我触发错误时,我得到了这个
但是,如果我尝试
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
} else {
...
};
我得到以下内容
{"errors":[{"value":"","msg":"First name is required","param":"firstname","location":"body"},{"value":"","msg":"Last name is required","param":"lastname","location":"body"},{"value":"","msg":"Username is required","param":"username","location":"body"},{"value":"","msg":"An account email is required","param":"email","location":"body"},{"value":"","msg":"This account email is not valid","param":"email","location":"body"},{"value":"","msg":"An account password is required","param":"password","location":"body"}]}
我不确定哪里出错了,我导入了 express-validator,所以对我来说它似乎没有捕获错误。
您没有将数组传递给渲染函数,使用 .array()
就像您在打印时所做的那样 JSON:
const errors = validationResult(req); // this is returning Result object, not array
if (!errors.isEmpty()) {
res.render('dashboard/register', {
errors: errors.array() // convert Result to array so it can be rendered
});
}
如果不使用 .array()
,Result
对象将被传递到您的模板中,并且无法呈现。