2016-06-29 7 views
1

データの入力を検証するためにエクスプレス検証を使用しています。素晴らしいですが、検証を使用してチェックするのは実用的ではありません(たとえば、Facebookのトークンが有効かどうかを確認する場合など)req.validationErrors()にカスタムエラーを追加しますか?

私は考えることができない、どういうわけか、オブジェクトなどを渡すことによって手動でエラーを追加しますか?

auth = (req, res, next) => { 
    //some setup: 
    res.locals.errors = []; 
    passport.authenticate('facebook-token', (err, user, info) => { 
     //this is where I would like to either validate with a custom validation or add this manually to whereever validationErrors get's it's values. 
     if(err && err.message === "Failed to fetch user profile"){ 
      res.locals.errors.push({ 
       param: 'access_token', 
       msg: 'Invalid access token', 
       value: req.query.access_token 
      }); 
     } 

    })(req, res, next); 
}, 

答えて

0

同じ問題が発生しました。エクスプレスバリデーターで生成された配列に何らかのエラーを追加して、req.validationErrors()を呼び出すと表示されるようにしたかったのです。

しかし、特定のパラメータやヘッダーを素早く型チェックするだけでなく、複数のフィールドを一度にチェックし、失敗したエラーを標準のvalidationErrors配列に移動したいと考えました。

express-validatorを使用して 'customValidator'を追加してこれを実現しました。マイカスタムバリデータは常に返します偽私はこのような私のカスタムバリデータを注入

:私のカスタム・ロジックが失敗した場合

app.use(expressValidator({ 
customValidators: { 
    myCustomFunc: function(value) { 
     return false; 
    } 
} 
})); 

私はこのカスタムバリデータを呼び出すには - これは設定した場合の効果を持っていますvalidationErrors配列のエラーです。エクスプレスバリデーターは有効なパラメーター/ヘッダーを渡す必要があるので、私は自分のダミーフィールドを作成し、そのフィールドでカスタムバリデーターを呼び出してfalseを返すことにしました。私は基本的にそれをフラグとして使用しています:

// code to check for custom logic - needs reqeust object 
// in this simple example I check whether field2 is set if 
// we have field1 
function isValidRequest(req, cb){ 

    if(req.headers.myField1 && !req.headers.myField2){ 
    // create dummy header field 
    req.headers.myDummyHeader = false; 
    // now call customValidator, pass it our new dummy header 
    req.checkHeaders("myDummyHeader", 
    "Invalid request, myField1 and myField2 should both be set").myCustomFunc(); 
    } 

cb() 
} 

... 

// (later) get the express validation errors 
// you'll see that our custom error message is included 
var errors = req.validationErrors(); 
console.log(errors); 
関連する問題