我用的是ejs-locals 模板引擎 我想知道我怎么做才可以实现 比如:跳到登陆页面可以让nav栏的登陆按钮成选中状态啊 或者说我想获得req.url怎么获取呢 谢谢各位
注:因为导航栏是 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”></i> <%=(‘site.about’)%></a>< /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();
};
@hylin 谢谢 明白了