簡體   English   中英

如何在Jade中分配變量?

[英]How can assign a variable in Jade?

我的應用程序要做的是,一旦用戶登錄,便會導出用戶信息,以便路由器使用它來更新配置文件模板。 但是,然后我要我的應用程序執行的是,當用戶仍然登錄時,如果他/她轉到主頁,我不希望導航欄顯示為具有登錄和注冊鏈接,而是希望使用退出和用戶名鏈接(與個人資料頁面相同)呈現導航欄。

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

玉無法執行此操作:-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

先感謝您 :)!

賦予res.render()Object的屬性在模板中已被視為locals或局部變量。

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

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

res.render()index.jade之間沒有額外的隔離層,它需要聲明變量並將值輸出到該變量。


該錯誤是因為Jade的插值語法#{...}code中無效。 它不打算與每個變量引用一起使用,僅當需要在純文本中輸出代碼結果時才使用。

雖然多余,但該行在語法上有效為:

- var isSignedIn = isSignedIn;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM