2016-05-20 61 views
4

我使用express-validator來驗證我的快速應用程序中的POST數據。我有在用戶選擇在哪裏可以選擇多個選項的形式:快速驗證器驗證參數是一個數組

<select name="category" multiple id="category"> 
    <option value="1">category 1 </option> 
    ....... 
</select> 

提交表格後,有效載荷顯示我,如果我選擇了多個值:現在

...&category=1&category=2&.... 

,在我的Express應用程序我嘗試驗證它是這樣的:

req.checkBody('category', 'category cannot be empty').notEmpty(); 

但是,即使是我送的多個值,我總是得到的錯誤 - category cannot be empty。如果我打印我的變量爲req.body.category[0] - 我得到的數據。但是,不知何故,我無法理解我需要將此傳遞給驗證器的方式。

回答

4

您可能需要創建自己的自定義驗證器;

expressValidator = require('express-validator'); 
validator = require('validator'); 

app.use(expressValidator({ 
    customValidators: { 
    isArray: function(value) { 
     return Array.isArray(value); 
    }, 
    notEmpty: function(array) { 
     return array.length > 0; 
    } 
    gte: function(param, num) { 
     return param >= num; 
    } 
    } 
})); 

req.checkBody('category', 'category cannot be empty').isArray().notEmpty(); 
+0

感謝哥們! – pankaj

+0

不客氣。 – erolkaya84

0

這也許有點晚了,但別人誰想要一個乾淨的解決方案,而無需使用customValidator,我創建了一個驗證器,可以挖掘到最深的陣列並驗證其內容。

https://github.com/edgracilla/wallter

在你的情況的驗證是:

const halter = require('wallter').halter 
const Builder = require('wallter').builder // validation schema builder 

const builder = new Builder() 

server.use(halter()) 

server.post('/test', function (req, res, next) { 
    let validationSchema = builder.fresh() 
     .addRule('category.*', 'required') 
     .build() 

    // validationSchema output: 
    // { 'category.*': { required: { msg: 'Value for field \'category.*\' is required' } } } 

    req.halt(validationSchema).then(result => { 
     if (result.length) { 
      res.send(400, result) 
     } else { 
      res.send(200) 
     } 

     return next() 
    }) 
}) 

錯誤信息可以在建設者初始化覆蓋。請檢查repo README.md以瞭解深入的用法。