我正在尝试创建一个全局参数,我的路由器将使用Express 4.11。这个的一般功能是我正在使用router.all('/*',function(){});
这个方法创建了一个列表,列出了我在部分玉器模板中动态创建导航栏的所有路由。我可以将列表传递给响应,但我希望不必在我创建的每个路由方法上调用它,即
router.all('/*',function(res,req,next){
var links = [];
console.log('Being Called...');
for(var i=0; i< router.stack.length; i++) {
var route = router.stack[i];
if(route['route'].path !== '/*'
&& route['route'].path !=='/favicon.ico'){
var name = (route['route'].path !=='/')? route['route'].path.toLowerCase().replace('/','') : "Home";
var active = (route['route'].path === url.parse(res.originalUrl).pathname)? true: false;
links.push({
name: name,
path: route['route'].path,
active: active
});
}
}
if(links.length > 0) {
console.log(res.locals);
res.set('appLinks',links);
}
next();
});
/*GET home page*/
router.get('/', function(req, res, next) {
res.render('index', {title: 'Home', appLinks: req.appLinks});
});
我希望appLinks成为我所有路线使用的全局参数。我该怎么做?或者我是否过度思考并应该添加一小段代码?
感谢您的帮助。
答案 0 :(得分:0)
您不应该使用router.all,而是在任何router.get或.post之前放置以下内容
router.use(function(req,res,next){
var links = [];
//your code here
res.locals.appLinks = links;
next();
});
res.locals中添加的任何内容都可以在视图中使用,因此无需将其传递给res.render(...)