2014-11-23 42 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; 
相关问题