【发布时间】: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