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!