如何实施已经与 REGISTER 路线一起使用的 express-validator 以与 passport-local LOGIN 一起使用?

How to implement express-validator, which already works with REGISTER route, to work with passport-local LOGIN?

在我的路线文件中有

const express = require("express");
const { body, check, validationResult } = require("express-validator/check");
const passport = require("passport");
const User = require("../models/User");

非常适合我的注册路线

router.post("/register",
    check('username').isEmail().withMessage("You need email for username registration"),
    check("password").custom((value, { req }) => {
        if (value !== req.body.password2) {
            throw new Error("Password confirmation failed")
        } else {
            return true;
        }
    }),
    (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            errors.array().forEach(err => req.flash('error', err.msg));
            return res.redirect('/register');
        }
        const newUser = new User({ username: req.body.username });
        User.register(newUser, req.body.password, (err, user) => {
            if (err) {
                console.log(err);
                return res.redirect('back');
            }
            passport.authenticate('local')(req, res, () => {
                res.redirect('/blogs');
            })
        });
    });

但我无法在 login passport 路由中实现该逻辑,所以我基本上 想知道如何将 express-validator 放入 passport login logic

router.post("/login", check('username').isEmail(), passport.authenticate("local", {
    failureRedirect: "/login"
}), function (req, res) {
    req.flash('success', 'You are successfuly Sign In');
    res.redirect("/blogs");
});

这是最适合我的。

 router.post("/login", 
      [check('username').isEmail().withMessage("username should be an email")], 
      (req, res, next) => {
          // Check validation.
          const errors = validationResult(req);
          if (!errors.isEmpty()) {
              errors.array().forEach(err => req.flash('error', err.msg));
              return res.redirect('/login');
          }
          next(); 
      },
      // If validation succeeds, go on with passport authentication logic.
      passport.authenticate("local", {...
      ...
      });
 );

您必须根据文档将验证逻辑放在一个数组中,并且您应该对 register 路由执行相同的操作。