Не работает валидация express-validate

Заранее извиняюсь если вопрос некорректен, но подскажите что не так делаю? Учусь по книге Node JS в действии(2018г), решил малость подредачить конструкции роутов адаптировав их под сгенерированный шаблон. Суть в том, что в книге нужно было сделать роуты так :

//в app.js 
app.get('/post', entries.form)
app.post('/post', entries.submit)
//в routes/entries.js
exports.form = (req, res) =>{
res.render('post', {title: 'Post'})
}

exports.submit = (req, res, next)=>{
const data = req.body.entry
const user = res.locals.user
const username = user ? user.name : null
const entry = new Entry({
        username,
        title: data.title,
        body: data.body,
        img: data.img
    })
entry.save((err)=>{
        if(err) return next(err);
        res.redirect('/')
    })
})

А я сделал чуть по-другому:

//в app.js 
app.use('/post', entriesRouter)
//в routes/entries

router.get('/', (req, res) =>{
    res.render('post', {title: 'Post'})
    }

router.post('/', (req, res, next))=>{
    const data = req.body.entry
    const user = res.locals.user
    const username = user ? user.name : null
    const entry = new Entry({
            username,
            title: data.title,
            body: data.body,
            img: data.img
        })
    entry.save((err)=>{
            if(err) return next(err);
            res.redirect('/')
        })
    })
module.exports = router

Все нормально работало пока не дошло дело до валидации, в отдельном файле описана валидация, но чтобы она работала нужно в post из первого примера вписать

app.post('/post', 
requireEntryTitle, 
requireTitleLengthAbove(4),
entries.submit)

Но у меня роут без entries.submit, а app.use('/post', entriesRouter). И теперь вот не пойму куда эти строки валидатора ткнуть чтобы они заработали. Куда не пихал либо вообще все ломается либо попросту не работает сия валидация. Отчаявшись я решил воспользоваться express-validator 6.4.0. Сделал как написано:

router.post('/', [
    check('title').isLength({ min: 20 }),
    check('body').isLength({ min: 20 }),
    check('img').isLength({ min: 20 }),
] , (req, res, next)=>{
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(422).json({ errors: errors.array() });
    }

дальше код без изменений. Теперь вроде-как что-то начало происходить, но вместо того, чтобы отвалидировать по длине оно просто выкидывает мне страницу с ошибками

{"errors":[{"msg":"Invalid value","param":"title","location":"body"},{"msg":"Invalid value","param":"body","location":"body"},{"msg":"Invalid value","param":"img","location":"body"}]}

Вроде как все верно, такие ошибки я и просил, только вот я их просил только в том случае, если кол-во символов меньше 20, а мне выкидывает её даже если по 50 ввести. Подскажите кто понимает в этом что не так сделано и как пофиксить. Подскажите куда ткнуть методы рукописного валидатора из книги, либо как правильно заюзать express-validator.


Ответы (0 шт):