node 页面导航的问题
发布于 2年前 作者 luxueyan2008 924 次浏览

我用的是ejs-locals 模板引擎 我想知道我怎么做才可以实现 比如:跳到登陆页面可以让nav栏的登陆按钮成选中状态啊 或者说我想获得req.url怎么获取呢 谢谢各位

8 回复

注:因为导航栏是 layout里面的 公用的 我想根据不同的url 实现菜单的选中状态

用JS,获取当前页面URL地址,然后去更新nav的按钮状态。。

@ijse 谢谢回复 其实用js不是一个很好的体验 这样的逻辑还是放到后端处理合理, 我想到解决方案了 就是render的时候 把req 和 res 对象传给view模板 不过不知道这样好不好 因为像jsp php 等都有全局对象可以获得的 可是nodejs没有…?

可以写一个中间件来实现 ,供你参考: 模版: < li class="<%=activeNav(‘/about’)%>">< a href="/about" title="<%=(‘site.about’)%>">< i class="icon-user icon-white"> <%=(‘site.about’)%>< /li> 后台中间件: /**

  • 其他拦截器
  • @param req
  • @param res
  • @param next */ exports.sundry = function(req,res,next){ //1.根据请求url选中顶部,侧边菜单 res.locals.activeNav = function (nav){ var result = '’; if(nav == ‘/’){ if(req.path == ‘/’){ result = 'active’; } }else{ if(req.path.indexOf(nav) == 0){ result = ‘active’; } } return result; }; //2.将www跳转到根域名 if(config.redirectToRoot && req.host.indexOf(‘www.’) > -1){ res.redirect(301,[req.protocol,’://’,req.host.replace(/(www.)/ig,’’),req.originalUrl].join(‘’)); }else{ next(); } };

哈哈 谢谢 刚刚学习 对中间件不熟 不知道放到哪里 以后用的时候回来重温一下

谢谢 能解释一下 第二个 www跳转到根域名 有什么作用吗?

@luxueyan2008 呃 删除第二个吧 我copy的我网站的代码 强制将 www.site.com跳转到site.com进行访问 在app.js中使用中间件,假设在common模块中:

app.use(common.sundry);

common.js:

exports.sundry = function(req,res,next){
  //1.根据请求url选中顶部,侧边菜单
  res.locals.activeNav = function (nav){
    var result = '';
      if(nav == '/'){
        if(req.path == '/'){
          result = 'active';
        }
      }else{
        if(req.path.indexOf(nav) == 0){
          result = 'active';
        }
      }
    return result;
  };
  next();
};
回到顶部