0

パスポートを使用してユーザーにログインしています。ユーザーが私のアプリにログインすると、ユーザー名がヘッダーに表示されます。

これは私のheader.jadeです:

div#header_content
input(type='text',name='search',id='globle_search')
span#user_status
    if(req.isAuthenticated())
        a(class='user_menu_btn',href='home', target='_blank' )  req.user.username
        a(class='user_menu_btn',href='logout') Logout
    else
        a(id='login_btn',href='login',class='user_status_btn') login

アプリを実行すると、次のようなエラーが発生します。

 ReferenceError: F:\shopping\views\includes\header.jade:4
 req is not defined

これは私のインデックスルートです:

app.get('/',index.index);

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

ヘッダーのログインステータスを維持するにはどうすればよいですか?

4

2 に答える 2

4

reqビュー内にアクセスするlocalsには、ビューエンジンに渡されるオブジェクトのメンバーである必要があります。これはデフォルトではありません。

// before: app.use(app.router);
app.use(function (req, res, next) {
    res.locals.req = req;
    next();
});

ただし、userisAuthenticatedは必要なものなので、req直接添付することができます。

// before: app.use(app.router);
app.use(function (req, res, next) {
    res.locals({
        get user() { // as a getter to delay retrieval until `res.render()`
            return req.user;
        },

        isAuthenticated: function () {
            return req.user != null;
        }
    })

    next();
});
if isAuthenticated()
    // ...
    a(...) #{user.username}
else
    // ...

詳細についてはres.locals、およびapp.localsを参照してください。

于 2012-10-12T03:12:06.680 に答える
1

ミドルウェア:

app.use(function (req, res, next) {
    if ( req.session.user ) {
      req.session.logged_in = true;
    }
    res.locals.sess = req.session;
    next();
});

ルート:

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

見る:

if(sess.logged_in)
    a(class='user_menu_btn',href='home', target='_blank' )  sess.user.username
    a(class='user_menu_btn',href='logout') Logout
else
于 2012-10-12T04:54:15.237 に答える