2016-09-26 69 views
1

我使用express驗證器進行驗證。在我的控制器中,我有一種將新圖片添加到數據庫的方法。這裏是我的代碼:Express - 如何使用express-validator驗證文件輸入?

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