You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用express-validator时调用controller方法页面无法加载如何解决?

问题原因

路由文件中验证通过后,仅引用了RegisterController.register方法对象,没有实际执行该方法也没有传递req、res参数,导致请求一直处于待响应状态,表现为页面无法加载。

修复方案

1. 修改路由文件的POST /register逻辑

找到路由文件中/register POST路由的else分支,修改为如下代码:

} else {
  // 调用register方法并传入req、res参数
  RegisterController.register(req, res);
}

修改后的完整路由片段参考:

router.post('/register', [
  body('username')
    .notEmpty()
    .withMessage('El nombre de usuario no debe quedar vacío.'),
  body('email')
    .notEmpty()
    .withMessage('El email no debe quedar vacío')
    .isEmail()
    .withMessage('El email debe de tener un formato correcto.'),
  body('password')
    .notEmpty()
    .withMessage('La contraseña no debe de quedar vacía.')
    .isLength({
        min: 8
    })
    .withMessage('La contraseña debe de tener 8 caracteres como mínimo.')
    .custom((value, { req }) => {
        if (value !== req.body.confirm__password) {
            return false;
        } else {
            return true;
        }
    })
    .withMessage('Las contraseñas deben coincidir.')
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
      return res.status(400).json({
          errors: errors.array()
      });
  } else {
      RegisterController.register(req, res);
  }
});

2. 可选优化:调整controller异步逻辑

当前controller中的数据库查询是异步操作,现有代码会在数据库操作未完成时就执行跳转,可能出现注册失败但仍然跳转的问题,建议将跳转逻辑放到数据库回调中:

register(req, res) {
  const sql = 'INSERT INTO contact_app.users (username, email, password) VALUES (?, ?, ?)';
  pool.query(sql, [req.body.username, req.body.email, Hash.encryptPass(req.body.password)], (err) => {
    if (err) {
      console.error(err);
      return res.status(500).json({ message: '注册失败,请重试' });
    }
    console.log('User registered correctly.');
    res.redirect('/formulario-login');
  });
}

内容的提问来源于stack exchange,提问作者Álvaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 19:24:02