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 对象将被传递到您的模板中,并且无法呈现。