【问题标题】:How can assign a variable in Jade?如何在 Jade 中分配变量?
【发布时间】:2014-11-23 14:29:41
【问题描述】:

我的应用程序所做的是,一旦用户登录,用户信息就会被导出,以便路由器使用它来更新配置文件模板。但是然后我希望我的应用程序做的是,当用户仍然登录时,如果他/她转到主页,我不希望导航栏与登录和注册链接一起呈现,而是想要使用与个人资料页面相同的注销和用户名链接呈现导航栏。

所以我的错误是当用户请求主页时,路由器传递了一个名为 isSignedIn 的变量以及模板名称。而且我希望将变量(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() 的属性,isSignedIn 已经是模板中的“本地”变量。 var 并不是真正需要的。
  • 好吧,我想将#{isSignedIn} 的值分配给声明为isSignedIn 的变量。否则,它会是这样的>> if(#{isSignedIn}=='true'){//some code} 仍然会导致渲染错误。
  • isSignedIn 已经是模板中的局部变量。不需要用#{...} 输出即可与Jade 共享,直接访问即可。 if isSignedIn

标签: javascript node.js express pug


【解决方案1】:

赋予res.render()Object 的属性已经在模板中被视为locals 或局部变量。

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

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

res.render()index.jade 之间没有额外的分隔层,需要声明变量并将值输出给它。


错误是因为 Jade 的插值语法 #{...}code 中无效。它并不打算与每个变量引用一起使用,只是在需要输出plain text 内的代码结果时使用。

虽然多余,但该行在语法上是有效的:

- var isSignedIn = isSignedIn;

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 2015-06-26
    • 2018-12-30
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多