node.js - 验证失败时如何重新填充我的登录表单

标签 node.js express express-validator connect-flash

当验证失败时,我处于登录表单中,我能够显示验证错误消息,但我不知道如何重新填充登录表单。

我希望用户在验证错误时不要再次输入他的电子邮件地址。

到目前为止我所做的就是尝试获取电子邮件值,因为我使用 connect-flash 从 Passport.js 发回错误。

我的护照本地策略是。

passport.use(
  "local.signin",
  new LocalStrategy(
    {
      usernameField: "email",
      passwordField: "password",
      passReqToCallback: true
    },
    function(req, email, password, done) {
      console.log("I am in passport");
      req.checkBody("email", "invalid email")
      .notEmpty()
      .isEmail();
      req.checkBody("password",'invalid password')
      .notEmpty();
      req.flash('email',email);
      req.flash('password',password);
      var errors = req.validationErrors();

        if(errors){
          var messages = [];
          errors.forEach((error) => {
              messages.push(error.msg);
          });
        console.log("errors: ", errors);
          return done(null, false, req.flash("error", messages));
        }
        User.findOne({email:email}, (err, user) => {
          if(err){
            return done(err);
          }
          if(!user){
            return done(null, false, {message: "No user found!"});
          }
          if(!user.validPassword(password)){
            return done(null, false, {message: "Wrong Password"});
          }
          return done(null, user);
        });
    }
  )
);

以及验证失败后路由重定向到的索引函数

exports.index = function(req, res) {
        var messages = req.flash("error");
        console.log("email: ",req.flash('email'));
    res.render("admin/index", {
      layout: "loginSignup",
      messages: messages,
      hasErrors: messages.length > 0,
      email: req.flash('email'),
      password: req.flash('password')
    });
};

在这里,当我console.log();时它显示空数组,电子邮件和密码未保存在闪存中,因此我无法填充 View 中的输入字段

当我收到错误消息时,我没有得到我的代码有什么问题,为什么不收到电子邮件和密码值。

或者有没有更好的方法在nodejs中重新填充表单

最佳答案

为什么不尝试这样的事情呢?

res.render("admin/index", {
  layout: "loginSignup",
  messages: messages,
  hasErrors: messages.length > 0,
  email: req.body('email') || '',
  password: req.body('password') || ''
});

注意,这是假设路由安装在 app.post() 调用上并且您正在使用 bodyparser 中间件,如果您使用 app.get(),则在我的示例中将 req.body 更改为 req.params .

关于node.js - 验证失败时如何重新填充我的登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57057240/

相关文章:

express - 如果在Express-Validator中间件之前使用multer作为中间件功能,则存在Multer(Express)处理错误

node.js - 自定义express-validator验证器不起作用

javascript - Npm 包在 CSS 中包含图像

node.js - 大文件上传到 Azure blob 在 Node.js 中处理

javascript - Knex 所需的配置选项 'client' 丢失错误

javascript - 使用回调在数组项上链接多个异步函数的正确方法

node.js - 禁用关键错误的快速错误处理

node.js - RedisStore 忽略主机和端口字段

javascript - 如何在 express.js 中将回调放入 res.json

node.js - Express-Validator v4 简约示例始终返回错误