7

すべてのテンプレートを拡張する、layout.jade という名前の Jade ファイルがあります。その中で、ユーザーが現在ログインしている場合、ログアウトボタンを使用できるようにしたいと考えています (これは req.session で追跡されます)。

したがって、layout.jade は次のようになります。

-if (loggedin)
  a.navButton(href="/logout") Log Out

ページのルートは次のようになります。

app.get("/foo", function(req, res) {
    res.render("foo", {loggedin: req.session.isValidUser});
});

問題は、すべてのルートでloggedin変数を手動で設定する必要がないということです。Express ミドルウェアを使用して、res.render に送信されるオブジェクトのデフォルト オプションを自動的に設定する方法はありますか? または、これを行うためのより良い方法はありますか?

基本的に、いくつかの変数セットを常にテンプレートに送信する方法と、特定のカスタム変数をルートで手動で設定することにより、特定のテンプレートで使用できるようにする方法を尋ねています。

4

3 に答える 3

7

これは、誰かがそれを行うより良い方法を持っていない限り、実際には私が見つけるのに苦労した文書化された機能のようです。最新のExpress ドキュメントから、

app.locals : アプリケーション ローカル変数は、アプリケーション内でレンダリングされるすべてのテンプレートに提供されます。これは、ヘルパー関数をテンプレートやアプリレベルのデータに提供するのに役立ちます。

したがって、私のログイン成功関数には、

req.session.username = profile.username;
app.locals.username = profile.username;

私のログアウト機能、

app.get('/logout', function (req, res) {
    delete app.locals.username;
    req.session.destroy();
    res.redirect('/login');
});

そして最後に、layout.jade/すべてのテンプレートで、

- if(username)
  a.navButton(href="/logout") Logout
于 2013-09-20T08:00:56.143 に答える