2016-09-26 2 views
1

Я использую экспресс-валидатор для проверки. В моем контроллере у меня есть метод добавления новых изображений в базу данных. Вот мой код:Экспресс - Как проверить ввод файлов с помощью экспресс-валидатора?

function createPicture(req, res) { 

req.checkBody('title', `The title can't be empty.`).notEmpty(); 
req.checkBody('image', 'You must select an image.').notEmpty(); 

let errors = req.validationErrors(); 

if (errors) { 
    res.json({errors: errors}); 
} else { ... } 

Код работает для поля заголовка, однако независимо от того, если выбрать изображение или нет - я все еще получаю ошибку проверки об этом. Как я могу проверить ввод файлов? Я просто хочу, чтобы это было необходимо.

ответ

2

У меня была такая же проблема, следующий код не будет работать, так как экспресс-валидатор только проверяет строки

req.checkBody('title', 'The title can't be empty.').notEmpty();

req.checkBody('image', 'You must select an image.').notEmpty();

Вам нужно будет написать собственный валидатор, выразить -элементатор допускает это, хорошо, это пример одного

//requiring the validator 
var expressValidator = require('express-validator'); 
//the app use part 
app.use(expressValidator({ 
customValidators: { 
    isImage: function(value, filename) { 

     var extension = (path.extname(filename)).toLowerCase(); 
     switch (extension) { 
      case '.jpg': 
       return '.jpg'; 
      case '.jpeg': 
       return '.jpeg'; 
      case '.png': 
       return '.png'; 
      default: 
       return false; 
     } 
    } 
}})); 

Чтобы использовать пользовательский валидатор, сделать это первым, чтобы убедиться, что пустые файлы не будут бросать неопределенную ошибку:

restLogo = typeof req.files['rest_logo'] !== "undefined" ? req.files['rest_logo'][0].filename : ''; 

Наконец, чтобы использовать свой собственный валидатор:

req.checkBody('rest_logo', 'Restaurant Logo - Please upload an image Jpeg, Png or Gif').isImage(restLogo); 

Спасибо за ваш вопрос, надеюсь, что это поможет кому-то

+0

Это было какое-то время назад, и я тоже пошел на заказ. Спасибо за ответ! Я добавлю этот кусок кода к своим настраиваемым валидаторам, чтобы я мог легко проверять ввод файлов через express-validator. – Codearts

Смежные вопросы