Corpo da solicitação de acesso na função de verificação do validador expresso v4

Comecei a usar o express.js com o express-validator para validar alguns dados de entrada e tenho problemas para acessar o corpo da solicitação na nova API de verificação que foi introduzida na versão 4.0.0.

Nas versões anteriores, você simplesmente adicionou o express-validator como middleware no seu app.js em algum lugar após o analisador de corpo:

// ./app.js
const bodyParser = require("body-parser");
const expressValidator = require("express-validator");

const index = require("./routes/index");

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());

Então, na minha rota de índice, eu poderia verificar os campos na função final de retorno de chamada do método post.

// ./routes/index.js
const express = require("express");
const router = express.Router();

router.post("/submit", (req, res, next) => {
    // check email
    req.check('email','Invalid email address').isEmail()
    // check if password is equal to password confirmation
    req.check('password', 'Invalid password')
    /* Access request body to compare password 
    field with password confirmation field */
    .equals(req.body.confirmPassword)

    // get errors
    const errors = req.validationErrors();

    // do stuff
});

Como neste exemplo, eu poderia facilmente verificar se os valores do meu campo de senha e o campo de confirmação de senha do meu formulário são iguais. No entanto, desde a versão 4, eles têm uma nova API que exige que você carregue o validador expresso diretamente no arquivo do roteador e passe as funções de verificação como uma matriz de funções antes do retorno de chamada final no método post, desta forma:

// ./routes/index.js
const express = require("express");
const router = express.Router();
const { check, validationResult } = require("express-validator/check");

router.post(
    "/submit",
    [
        // Check validity
        check("email", "Invalid email").isEmail(),
        // Does not work since req is not defined
        check("password", "invalid password").isLength({ min: 4 })
        .equals(req.body.confirmPassword) // throws an error
    ],
    (req, res, next) => {
    // return validation results
    const errors = validationResult(req);

    // do stuff
});

Isso não funciona, pois req não está definido. Portanto, minha pergunta é: como acessar o objeto de solicitação em umcheck() cadeia para comparar dois campos diferentes com a nova API de validador expresso? Muito obrigado antecipadamente!

questionAnswers(1)

yourAnswerToTheQuestion