2011-11-08 20 views
0

私はNode.jsとExpressフレームワークでWebページをやっています。私は既に登録とログインを持っています(私はセッション中にユーザーIDを持っています)。次のステップは、ユーザーが認証されるたびに異なるページをレンダリングすることです。Node.js Expressとの応答

これらのページの一部には、Userオブジェクトが必要です。このオブジェクトは、my dbのユーザーのマッピングです。したがって、認証されたリクエストが来るたびに私はdbからユーザを取得する必要があります。しかし、毎回このコードを書くことは、これを行うには悪い方法のようです。それで、ここに質問があります:それは可能です(それがどうすればいいですか)、プレレスポンスなので、ユーザーが認証された後にメインの応答をすると自動的にUserオブジェクトを取得できますか?

+1

'User'オブジェクトをセッションに保存できませんか? – Fabian

+0

実際には、コンテンツが変更されている可能性があるので、私が応答するたびに正しいデータがあることを確認したいと思います。うーん、でもあなたが正しいかもしれない。たぶん私はそれを再設計すべきだろう。 – freakish

答えて

2

ミドルウェアは、あなたが参照しているものです。ミドルウェアは、ルートがトリガーされたときに順番に呼び出される関数です。したがって、loadUser関数を使用するには:

function loadUser(req, res, next) { 
    // You would fetch your user from the db 
    var user = users[req.params.id]; 
    if (user) { 
    req.user = user; 
    next(); 
    } else { 
    next(new Error('Failed to load user ' + req.params.id)); 
    } 
} 

app.get('/user/:id', loadUser, function(req, res){ 
    res.send('Viewing user ' + req.user.name); 
}); 

必要な数のミドルウェア関数を定義できます。最後にnext()を呼び出して、次の関数にルート処理を渡すようにしてください。

+0

美しい、ありがとう!これはまさに私が必要なものです! Peter Lyonsが述べたように、これはすべてExpressドキュメントでカバーされています。私はそこを見ましたが、なぜ私はそれを逃したのか分かりません。 :) 再度、感謝します!私はあなたの答えに印をつけました.Peter Lyonsはもっと多くのポイントを持っています。 :) – freakish

1

このEXACTの例は、express.js route middleware docsに記載されています。読んでみると、ミドルウェアを使用してアプリケーションの多くのルートパスで必要な共通の機能を除外するパターンが表示されます。

関連する問題