Не работает валидация 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.