2014-06-14 4 views
3

J'essaye de construire la validation des paramètres dans mon API Node/Express en utilisant express-validator. Cependant, lorsque je fais une requête POST avec un champ manquant (nom dans ce cas) en utilisant la commande curl suivante curl -X POST -d "foo=bar" http://localhost:3000/collections/test, la requête passe toujours bien, en ignorant la validation. Ci-dessous est mon code actuel - des idées sur la raison pour laquelle la validation est ignorée?Validation des paramètres POST avec Express-Validator

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); 

Répondre

8

Vous devez ajouter une vérification pour toute erreur de validation avant de traiter la demande. Donc, pour votre API post vous devez mettre à jour à ressembler à quelque chose comme:

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) 
    }); 
}); 

Pour plus d'informations, voir l'exemple d'utilisation: https://github.com/ctavan/express-validator#usage

+0

Cela a fait l'affaire - n'a pas réalisé la logique d'erreur était nécessaire après le 'req.checkBody'. Merci! – Anconia

Questions connexes