то, что делает мое приложение, после входа пользователя пользовательская информация экспортируется, чтобы маршрутизатор использовал его для обновления шаблона профиля. Но тогда то, что я хочу, чтобы мое приложение было сделано, пока пользователь все еще вошел в систему, если он/она отправляется на домашнюю страницу, я не хочу, чтобы панель навигации отображалась с помощью signin и signup, скорее всего, это визуализируйте навигационную панель со значком и именем пользователя, которое является тем же самым, что и страница профиля.Как назначить переменную в Jade?
Таким образом, моя ошибка заключается в том, когда пользователь запрашивает домашнюю страницу, маршрутизатор передает переменную с именем isSignedIn вместе с именем шаблона. И я хочу, чтобы значение переменной (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()'] (http://expressjs.com/4x/api.html # res.render), 'isSignedIn' уже будет« локальной »переменной в шаблоне. 'Var' на самом деле не нужен. –
ну, я хотел присвоить значение # {isSignedIn} переменной, объявленной как isSignedIn. В противном случае это будет что-то вроде этого >> if (# {isSignedIn} == 'true') {// некоторый код}, который по-прежнему вызывает ошибку при рендеринге. – user3775940
'isSignedIn' уже является локальной переменной в шаблоне. Его не нужно выводить с помощью '# {...}' для совместного использования с Jade, только что доступным. 'if isSignedIn'' –