2014-11-23 3 views
1

то, что делает мое приложение, после входа пользователя пользовательская информация экспортируется, чтобы маршрутизатор использовал его для обновления шаблона профиля. Но тогда то, что я хочу, чтобы мое приложение было сделано, пока пользователь все еще вошел в систему, если он/она отправляется на домашнюю страницу, я не хочу, чтобы панель навигации отображалась с помощью 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 

Спасибо заранее!

+0

Будучи дано как свойство [ 'res.render()'] (http://expressjs.com/4x/api.html # res.render), 'isSignedIn' уже будет« локальной »переменной в шаблоне. 'Var' на самом деле не нужен. –

+0

ну, я хотел присвоить значение # {isSignedIn} переменной, объявленной как isSignedIn. В противном случае это будет что-то вроде этого >> if (# {isSignedIn} == 'true') {// некоторый код}, который по-прежнему вызывает ошибку при рендеринге. – user3775940

+0

'isSignedIn' уже является локальной переменной в шаблоне. Его не нужно выводить с помощью '# {...}' для совместного использования с Jade, только что доступным. 'if isSignedIn'' –

ответ

1

Свойства Object, данные res.render(), уже будут рассматриваться как 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; 
Смежные вопросы