2016-07-02 8 views
0

POSTリクエストに対して、要求の本文のフィールドを検証するノード/エクスプレスプロジェクトがあります。私はセットアップPOSTメソッドを処理ルートごとに設定をしたいと思います。このためミドルウェアで明示的にルート固有の設定を確認できますか?

、configがその制約を持つフィールドのリストを持つことになり、このような何か:

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

私はこれを希望私は一連のフィールドとその制約を定義することができ、ミドルウェアによって自動的に検証されます。私はミドルウェアを要求する前に実行されていることを理解しますが、このようなあたりのルート構成を有し、ミドルウェアでそれを検証するためにどのような方法がある

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

ので、ミドルウェアは次のようになりますか?

ありがとうございます。

+0

私はあなたのモデルにすべてのフィールドを検証することができたり、MongoDBのためにマングースを使用している場合は、あなたがあなたのフィールドを検証するために事前のようなマングースのミドルウェアを使用することができれば、それは良い練習になると思います。 – rroxysam

+0

私はその考えが好きです。 – northsideknight

+0

@rroxysamこれを答えとして追加し、擬似コードの例を付けることができますか? – northsideknight

答えて

1

どのようにこの1について:
使用表明・バリ(check in detail)とあなたのパラメータをチェックするルート正規表現を、あなたのAPIはすべて/API/ *であることを前提としています

をサーバー:

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 express.jsミドルウェアnode-validatorです。私は自分のプロジェクトでうまく働いています。検証とサニタイズの両方を行うことができます。

// 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(); 
関連する問題