2014-11-23 51 views
1

我的應用做的是,一旦用戶登錄,用戶信息就會被導出,以便路由器使用它來更新配置文件模板。但是,我希望我的應用要做的是,在用戶仍然登錄的情況下,如果他/她進入主頁,我不希望用登錄和註冊鏈接呈現導航欄,而是希望使用與簡介頁面相同的註銷和用戶名鏈接呈現導航欄。如何在Jade中分配一個變量?

所以我的錯誤是當用戶請求主頁時,路由器將一個名爲isSignedIn的變量與模板名稱一起傳遞。我想把變量的值(isSignedIn)存儲在jade文件中的另一個變量中,這樣如果用戶是signed,那麼它會爲主頁呈現不同的導航欄。

玉石無法執行這樣的: -var isSignedin =#{} isSignedIn

我的一些代碼如下所示:

//app.js

app.post('/signup', 
    passport.authenticate('signup_local_strategy', 
     {successRedirect:'/profile', 
     failureRedirect:'/signup_error' 
     })); 
passport.use('signup_local_strategy',new localStrategy(
    {passReqToCallback: true}, 
    function(req, username, password, done) 
    { 
     user_model.findOne({username:username},function(err, user){ 
      if(err) 
      { 
       return done(err); 
      } 
      if(user == null) 
      { 
       var new_user = new user_model({ 
        username: username, 
        password: password, 
        university: req.body.university, 
        hometown: req.body.hometown 
       }); 
       new_user.save(function(err){ 
        if(err) 
        { 
         throw err; 
        } 
       }); 
       user = new_user; //Assigned the variable new_user to user to authematically serialize the new user.   
       return(done(null, user)); 
      } 
      if(user.username == username) 
       { 
        return(done(null, false)); 
       }  
     });  
    } 
)); 
app.get('/profile', routes.userProfileResponseHandler); 
app.get('/', routes.indexResponseHandler); 

//serialize user and export the the user information so that the router update the view 
passport.serializeUser(function(user, done){ 
    done(null, user.id); 
    exports.isSignedIn = true; 
    exports._id = user.id; 
    exports.username = user.username; 
    exports.university = user.university; 
    exports.hometown = user.hometown; 
}); 

routes.js

exports.indexResponseHandler = function (req, res){ 
    res.render('index', {title: "College Clubs MN", isSignedIn: app.isSignedIn}); 
} 

//index.jade

- var iSignedin = #{isSignedIn} // It could not assign #{isSignedIn} in the variable. 
ul(class="nav navbar-nav navbar-right") 
    if(isSignedIn=='true') 
     li 
      a(href="/signout") Signout 
     li 
      a(href="/profile") #{username} 
    else 
     li 
      a(href="/signin") Sign in 
     li 
      a(href="/signup") Sign up 

謝謝提前:)!

+0

報錯作爲一個屬性爲['res.render()'](http://expressjs.com/4x/api.html:

雖然多餘的,因爲行是語法上有效#res.render),'isSignedIn'已經是模板中的一個「本地」變量。 var不是真的需要。 – 2014-11-23 05:35:17

+0

好吧,我想將#{isSignedIn}的值賦給聲明爲isSignedIn的變量。否則,它會是這樣的>> if(#{isSignedIn} =='true'){//一些代碼}仍然會導致渲染錯誤。 – user3775940 2014-11-23 05:53:27

+0

'isSignedIn'已經是模板中的局部變量。它不需要用'#{...}輸出來與Jade共享,只需訪問它。 '如果isSignedIn' – 2014-11-23 05:59:05

回答

1

給定res.render()Object的屬性在模板中已被視爲locals或局部變量。

// - var iSignedin = #{isSignedIn} // not necessary 

ul(class="nav navbar-nav navbar-right") 
    if isSignedIn 
     // ... 

沒有res.render()index.jade之間的分離的附加層需要被聲明的變量和值將被輸出到它。


這個錯誤是因爲翡翠的插語法,#{...},是不是內code有效。它不適用於每個變量引用,只需在plain text內輸出代碼結果。

- var isSignedIn = isSignedIn; 
相關問題