如何使用路线操纵导航栏?

7 html javascript node.js express

我的layout.hbs中有一个导航栏:

<div class="collapse navbar-collapse" id="collapse">        
        <ul class="nav navbar-nav navbar-right">
          <li><a href={{sign}}>{{issign}}</a></li>
          <li><a href={{los}}>{{islog}}</a></li>
          <li><a href="/">Home</a></li>
        </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

我想在旅途中更改内容,例如当用户登录时,我想将登录文本更改为注销并重定向到其他页面.我通过路线这样做.

router.get('/', function(req, res, next) {

    var vm = {
      title: 'Join Fatty-cruxifinier',
      sign: 'about',
      issign : 'SIGNUP',
      islog: 'LOGIN',
      los: 'login'
    };
  res.render('signup', vm);
});

router.post('/', function(req, res, next) {
  userServices.addUser(req.body, function(err){
    if(err){
    var vm = {
      title: 'Create an account',
      input: req.body,
      error: err
    };
    delete vm.input.password;
    return res.render('signup', vm);
  }
  res.redirect('/');
 });
});
Run Code Online (Sandbox Code Playgroud)

虽然这似乎工作,我需要的添加islog,issign,lossign变量每一个网页,我有.

有一个更好的方法吗?

小智 0

您可以拥有一个捕获所有路由器,并在每次响应之前运行登录逻辑。

var _ = require('lodash');
var parameters = {};

function isLoggedin(req, res, next) {
  // check is the user is logged in
  res.user = {
    // userdata
  };
  next();
}

// catch all the get routes
app.get(/^(.*)$/, isLoggedin, function(req, res, next){

  if (res.user) {
    var _parameters = {
      title: 'Join Fatty-cruxifinier',
      sign: 'about',
      issign : 'SIGNUP',
      islog: 'LOGIN',
      los: 'login'
    };
  } else {
    var _parameters = {
      title: 'Join Fatty-cruxifinier',
      sign: 'about',
      issign : 'SIGNUP',
      islog: 'LOGIN',
      los: 'login'
    };
  }

  parameters = _.extend(parameters, _parameters);

  next();
});

app.get('/account', function(req, res, next){
  res.render('signup', parameters);
});
Run Code Online (Sandbox Code Playgroud)