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

Javascript 如何使用路线操纵导航栏?,javascript,html,node.js,express,Javascript,Html,Node.js,Express,我的布局中有一个导航栏。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

我的布局中有一个导航栏。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>
虽然这似乎可行,但我需要将
islog
issign
los
sign
变量添加到我拥有的每个网页中


有更好的方法吗?

您可以拥有一个全覆盖路由器,并在每次响应之前运行loggedin逻辑

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);
});

我在我的项目中做到了这一点,您可以使用类似的方法:-

JS

var cookieuser = req.cookies.userId || '';      
    res.render('index', {
        ID : cookieuser,
        data : jsonresponse.entries
    });
      <ul class="dropdown-menu">
           <% if(ID.length<=0) { %>
           <li><a href="/Login">Login</a></li>
           <% }else{ %>
           <li><a href="/Logout">Logout</a></li>
           <li><a href="/History">History</a></li>
           <% } %>
EJS

var cookieuser = req.cookies.userId || '';      
    res.render('index', {
        ID : cookieuser,
        data : jsonresponse.entries
    });
      <ul class="dropdown-menu">
           <% if(ID.length<=0) { %>
           <li><a href="/Login">Login</a></li>
           <% }else{ %>
           <li><a href="/Logout">Logout</a></li>
           <li><a href="/History">History</a></li>
           <% } %>

    您还可以使用
    res.locals
    。当模板编译时,
    res.locals
    中的任何内容都将在Handlebar上下文中可用。因此,您可以制作如下中间件:

    app.use((req, res, next) => {
      // get user from cookie, database, etc.
      res.locals.user = user;
      next();
    });
    
    如果将此中间件放在其他路由之前,则用户对象将可用于每个响应

    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);
    });
    
    然后在车把模板中,您只需使用条件:

    {{#if user}}
      <a href=/logout>Logout</a>
    {{else}}
      <a href=/login>Login</a>
    {{/if}}
    
    {{#if user}
    {{else}
    {{/if}