2014-06-14 4 views
3

Я пытаюсь построить проверку параметров в моем Node/Express API с помощью express-validator. Однако, когда я делаю запрос POST с отсутствующим полем (имя в этом случае), используя следующую команду curl curl -X POST -d "foo=bar" http://localhost:3000/collections/test, запрос все еще проходит успешно, пропуская проверку. Ниже мой текущий код - любые идеи относительно того, почему валидация обходится?Проверка паролей POST с экспресс-валидатором

var util = require('util'); 
var express = require('express'); 
var mongoskin = require('mongoskin'); 
var bodyParser = require('body-parser'); 
var expressValidator = require('express-validator'); 

var app = express(); 
app.use(bodyParser()); 
app.use(expressValidator()); 

var db = mongoskin.db('mongodb://@localhost:27017/test', {safe:true}) 

app.param('collectionName', function(req, res, next, collectionName){ 
    req.collection = db.collection(collectionName) 
    return next() 
}); 

app.post('/collections/:collectionName', function(req, res, next) { 
    req.checkBody('name', 'name is required').notEmpty(); 

    req.collection.insert(req.body, {}, function(e, results){ 
    if (e) return next(e) 
    res.send(results) 
    }); 
}); 

app.listen(3000); 

ответ

8

Перед обработкой запроса необходимо добавить проверку на наличие ошибок проверки. Так что для вашего post API вам необходимо обновить его, чтобы выглядеть примерно так:

app.post('/collections/:collectionName', function(req, res, next) { 
    req.checkBody('name', 'name is required').notEmpty(); 

    // check for errors! 
    var errors = req.validationErrors(); 
    if (errors) { 
    res.send('There have been validation errors: ' + util.inspect(errors), 400); 
    return; 
    } 

    req.collection.insert(req.body, {}, function(e, results){ 
    if (e) return next(e) 
    res.send(results) 
    }); 
}); 

Для получения более подробной информации смотрите пример использования: https://github.com/ctavan/express-validator#usage

+0

Это сделал трюк - не понимал логики ошибок было необходимо после 'req.checkBody'. Благодаря! – Anconia

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