2016-07-02 14 views
0

Ich habe ein Knoten/Express-Projekt, in dem für alle POST Anfrage gemacht, möchte ich die Felder im Körper der Anfrage zu validieren.Können Sie Express Middleware eine route-spezifische Konfiguration überprüfen?

dieses Denn ich Setup eine Konfigurations pro Strecke möchten die POST Methoden behandelt, würde die Config eine Liste von Feldern mit ihren Einschränkungen haben, so etwas wie dieses:

router.post('/some_path', function(request, response, next){ 
    this.fieldsToValidate = [ 
     { 
      name: 'field_name', 
      required: true, 
      ... 
     }, 
     ... 
    ] 
    // handle route after validation 
} 

ich dies möchte eine pro-route-Konfiguration sein, so dass ich eine Reihe von Feldern und ihre Einschränkungen definieren kann und diese automatisch von der Middleware validiert werden.

so würde Middleware in etwa so aussehen:

function(request, response, next){ 
    if (request.method === 'POST'){ 
     this.fieldsToValidate.forEach(function(field){ 
      //do some validation 
     }); 
    } 
    next(); 
} 

Ich verstehe, dass Middleware vor der Anforderung ausgeführt wird, aber ist es eine Möglichkeit, eine pro-Route Konfiguration wie diese hat und es mit Middleware zu validieren?

Vielen Dank im Voraus.

+0

Ich denke, es wird eine gute Übung, wenn Sie alle Felder im Modell validieren können, oder wenn Sie Mungo für mongodb verwenden, können Sie Mungo-Middleware wie vor verwenden, um Ihre Felder zu validieren. – rroxysam

+0

Ich mag diese Idee. – northsideknight

+0

@rroxysam könnten Sie das als Antwort hinzufügen und ein Pseudocode Beispiel geben? – northsideknight

Antwort

1

Wie wäre es dieses:
Verwendung Express-Validator (check in detail) und Route regex Ihre Parameter zu überprüfen, annehmen, dass Ihr apis alle sind in /api/ *:

der Server:

var expressValidator = require('express-validator'); 
app.use(bodyParser.json()); 
app.use(expressValidator()); 
app.use('/api',function(req,res,next){ 
    switch(req.baseUrl) 
    { 
     case ://API 1 
      req.checkHeaders('user','valid header').notEmpty(); 
      break; 
     case ://API 2 
     //Others 
    } 
    var errors = req.validationErrors(); 
    if (errors) { 
     res.send('There have been validation errors: ' + util.inspect(errors), 400); 
     return; 
    } 
    next(); 
}); 
0

express-validator eine express.js Middleware für node-validator. Ich benutze meine Projekte gut. Sie können sowohl die Validierung als auch die Bereinigung durchführen.

// VALIDATION 
    // checkBody only checks req.body; none of the other req parameters 
    // Similarly checkParams only checks in req.params (URL params) and 
    // checkQuery only checks req.query (GET params). 
    req.checkBody('postparam', 'Invalid postparam').notEmpty().isInt(); 
    req.checkParams('urlparam', 'Invalid urlparam').isAlpha(); 
    req.checkQuery('getparam', 'Invalid getparam').isInt(); 

    // OR assert can be used to check on all 3 types of params. 
    // req.assert('postparam', 'Invalid postparam').notEmpty().isInt(); 
    // req.assert('urlparam', 'Invalid urlparam').isAlpha(); 
    // req.assert('getparam', 'Invalid getparam').isInt(); 

    // SANITIZATION 
    // as with validation these will only validate the corresponding 
    // request object 
    req.sanitizeBody('postparam').toBoolean(); 
    req.sanitizeParams('urlparam').toBoolean(); 
    req.sanitizeQuery('getparam').toBoolean(); 
Verwandte Themen