Express Validator с использованием функции промежуточного программного обеспечения 5.3.0 - PullRequest
0 голосов
/ 14 ноября 2018
const app = require('express')();

const session = require('express-session');

const {
    check,
    validationResult
} = require('express-validator/check');

app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: false }
}))
app.get("/test", [
    // username must be an email
    check('username').not().isEmpty(),`//.withCustomMessage() based on the content of req.session`
    // password must be at least 5 chars long
    check('password').not().isEmpty()
],(req,res)=>{
    console.log("req.session", req.session);
    // Finds the validation errors in this request and wraps them in an object with handy functions
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.array() });
    }
    //console.log("req.session",req.session);
});

app.get("/",(req,res,next)=>{
  req.session.message  = "beoulo ";
 // console.log(req.session);
  res.status(200).json({
      "status" :"session set"
  });
});

app.listen(3000,()=>{
    console.log("Listening on port 3000!!!");
});

Является ли прохождение проверки напрямую в качестве промежуточного программного обеспечения единственным способом ее использования? Можем ли мы по-прежнему использовать формат req.checkbody (field, errormessage) или что-то эквивалентное внутри отдельной функции промежуточного программного обеспечения, потому что сообщение об ошибке должно быть взято из сеанса

Я хочу получить доступ к переменной из req.session и на ее основе создать собственное сообщение об ошибке

предыдущая реализация работала нормально, так как использовала req.checkBody ()

с новыми изменениями, что я должен сделать, чтобы справиться с этим сценарием.

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете переписать сообщения об ошибках по умолчанию внутри вашего собственного обработчика.

Предполагая, что ваши сообщения об ошибках хранятся в req.session.errors, и что это объект, который отображает конкретную проверку на конкретное сообщение об ошибке.

Например:

// req.session.errors =
{
  "USERNAME_EMPTY" : "The username cannot be empty",
  "PASSWORD_EMPTY" : "The password cannot be empty",
}

Далее для каждой проверки вы должны предоставить пользовательские сообщения, соответствующие ключам вышеупомянутого объекта:

check('username').not().isEmpty().withMessage('USERNAME_EMPTY')
check('password').not().isEmpty().withMessage('PASSWORD_EMPTY')

Наконец, внутри вашего обработчика вы выполняете поиск ошибок валидации до значений сообщения об ошибке:

if (! errors.isEmpty()) {
  const list = errors.array();

  list.forEach(error => {
    error.msg = req.session.errors[error.msg] || error.msg;
  });

  return res.status(422).json({ errors: list });
}

Или просто зависит от более старой версии express-validator, чтобы вы могли продолжать использовать устаревший API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...