0

こんにちは、私は mongoose を使用して expressjs backbonejs を開発しています。私のテンプレート エンジンは HTML (text.js を使用) です。

私のアプリには、登録リンクとログイン リンクを含むナビゲーション バーと、コンテンツを配置するコンテナーがあります。私は、passportjs を使用してログイン システムを実装しました。これはうまく機能します。ログインすると、ユーザー情報を含む req.user オブジェクトが作成されます。

ログインしているときにナビゲーションバーのリンクを非表示にしたいので、ブロックされました。

すべてが成功した場合に /login への POST を実行したとき、/account にリダイレクトし、そのテンプレートを使用して別のビューをロードします。req.user データはありますが、navbar ビューにはそれがなく、できませんリンクを非表示にします。

navbar の HTML コードをテンプレートに配置し、POST /login の後に「extends」を含む navbar テンプレートを含む jade テンプレートをレンダリングできるため、jade に渡そうとしました。しかし、この原因で、URL に # を使用してナビゲートできないため、すべてのバックボーン機能を失いました。

これを行う正しい方法はどれですか?

よろしくお願いします。

4

1 に答える 1

0

シングルトンパターンを使用することで状況を解決できます。つまり、たとえばメソッドisLoggedを持つグローバル構成オブジェクトです。アイデアは、アプリケーションのエントリ ポイントでこのオブジェクトを初期化することです。必要なデータがあり、後でそのシングルトンを介してアクセスする場所。例えば:

var AppConfig = (function() {

    var isLoggedFlag = false;
    var changeLoggedStatus = function(value) {
        isLoggedFlag = value;
    }
    var isLogged = function() {
        return isLoggedFlag;
    }

    return {
        isLogged: isLogged,
        changeLoggedStatus: changeLoggedStatus
    }

})();

ユーザーがログに記録されていることがわかっている場合は、次を使用します。

AppConfig.changeLoggedStatus(true);

あなたの見解では、チェックしてください

if(!AppConfig.isLogged()) {
    // hide whatever you need to
}
于 2013-09-12T22:10:26.793 に答える