2017-07-18 15 views
0

nodejs、express、およびmongodbにOAuth認証フローを自分で作成しようとしています。クライアントが各ルートの前に自分のMongoDBで利用可能かどうかを確認しようとしています。だから、クライアントIDとクライアントシークレットが自分のDBで利用可能かどうかをチェックするミドルウェア機能を作った。ここに私のミドルウェア機能nodejs非同期ミドルウェアが動作していません

module.exports = function() { 
    return function(req, res, next) { 
     // Implement the middleware function based on the options object 

     winston.info("check client") 
     User.getClient(req.get("clientId"), req.get("clientSecret"), function (err, client) { 
      winston.info("checking time"); 
      if (client) { 
       return next(); 
      } else { 

      } 
     }); 

     winston.info("check client done") 
    } 
} 

ですが、私は私のマングースモデルを呼び出していて、私は完璧に働いてイマイチミドルウェアと思います。非同期呼び出しが終了するまでに。スクリプトが通過しています。 私がここで達成したいのは、クライアントがdbで利用可能な場合、ミドルウェアが合格するということです。だから、ミドルウェアは、それがマングースから応答を得た後に進む必要があります。ここに私のルータのコードです。

var express = require('express') 
    , router = express.Router() 
    , clientVerify = require("../middlewares/clientVerify"); 

router.use(clientVerify()) 
+0

約束してユーザーオブジェクトを返そうとしましたか? –

+0

番号。あなたは私を模範に導くことができますか? – coder

+0

[this](https://stackoverflow.com/a/35247560/3763848)の例を見てください –

答えて

0

私はこの問題を解決することを約束しました。 @ Vassilis Pallasに感謝の意を表する。

return new Promise(function(resolve,reject){ 
      User.getClient(req.get("clientId"), req.get("clientSecret"), function (err, client) { 
       winston.info(client); 
       if (client) { 
        resolve(client); 
       } else { 
        res.status(401).send({ 
         status: 401, 
         message: "unauthorized" 
        }); 
       } 
      }); 
     }).then(function(saveResult){ 
      saveResult = saveResult && typeof saveResult == 'object' ? saveResult.toJSON() : saveResult; 
      winston.info(saveResult); 
      if (saveResult) 
       return next(); 
     }); 
関連する問題