2017-08-29 4 views
1

私はそれを追加するルート上で動作するセキュリティチェックミドルウェアを設定しようとしています。エクスプレスミドルウェアを使用し、ルートにres.localデータを渡す

ミドルウェア

function SecurityCheckHelper(req, res, next){ 
    apiKey = req.query.apiKey; 
    security.securityCheck(apiKey).then(function(result) { 
     res.locals.Security = result.securitycheck; 
     console.log(res.locals.Security); 
    }); 
    return next(); // go to routes 

}; 

ルート

app.get('/settings', SecurityCheckHelper,function(req, res, next) { 
    console.log(res.locals); 
}); 

ITSは比較的単純私は/settingsルートに(真/偽を返す)result.securitycheckに合格しようとしています。しかしres.localsは空のオブジェクトを返しています

+0

あなたsecurityCheckは非同期で、あなたの即座の次返すので、これは..ですあなたの、その後の内部で、次を置く。..素晴らしい@Keith – Keith

+0

!あなたは頭の上にそれを釘付けにしたので、質問に答えることができるので、私はあなたに信用を与えることができます:D – Charles

答えて

1

securityCheckを実行する前に、あなたの呼び出しが次に行われました。

IOW:securityCheckの処理が完了する前に、次のミドルウェアが処理されています。 securityCheckは非同期です。

あなたの中に次のものを置くと、securityCheckが終了するまで待機します。

例えば、

function SecurityCheckHelper(req, res, next){ 
    apiKey = req.query.apiKey; 
    security.securityCheck(apiKey).then(function(result) { 
     res.locals.Security = result.securitycheck; 
     console.log(res.locals.Security); 
     next(); 
    }); 
}; 
1

セキュリティチェックの約束をコールバックにインターフェイスする必要があります。

function SecurityCheckHelper(req, res, next){ 
    apiKey = req.query.apiKey; 
    security.securityCheck(apiKey) 
    .then(function(result) { 
     res.locals.Security = result.securitycheck; 
     console.log(res.locals.Security); 
     return next(); 
    }) 
    .catch(err => next(err)); 
}; 
+0

私は.catchの追加が好きです!ありがとう!彼が最初に答えたので私はキースへの答えを授かった:)あなたに助けてくれてありがとう! – Charles

関連する問題