Nodejs +把手 – 拉当前的URLpath并传递给助手

我正在尝试创build一个meta标签句柄助手抓取urlpath名,并使用该值的switch语句,然后将string返回到我的元标记在HTML头,但我不知道当前抓取url的最佳途径我的switch语句的path。 我试过window.location.pathname ,但得到一个错误,没有定义window 。 我知道path模块需要你传递一些东西来parsing出来,但是我不确定最好的值是什么。 谁能帮我?

这是我的手柄帮手文件:

 var path = require('path'); var metaHelpers = function(hbs) { hbs.registerHelper('metaTitle', function(){ var urlPath = path.dirname(); console.log(urlPath); switch(urlPath) { case "/": { return 'Index Test' } break; case "/login": { return 'Login Test' } break; default: { return 'No Meta Tag' } } }); }; module.exports = metaHelpers; 

由于您的模板在服务器上执行,因此不需要查询window对象。 相反,您必须从当前的Request对象中获取URLpath。 幸运的是,在Express中 ,Request对象有一个path属性。

然而,为了把你的解决scheme作为一个Handlebars帮助器来实现,你需要find一种方法将Request对象(或者至less它的.path )从视图传递给helper。 我认为更好的解决scheme是执行你的帮手逻辑和构build标题之前 ,呈现响应。

Express具有中间件的概念,它是可以根据请求修改Request和Response对象的函数。 我们可以编写一个中间件函数为每个请求构造标题,然后将其添加到Response对象的locals属性中。 res.locals对象的属性将可用于为当前响应呈现的视图。

 app.use(function (req, res, next) { switch (req.path) { case '/': res.locals.title = 'Index Test'; break; case '/login': res.locals.title = 'Login Test'; break; default: res.locals.title = 'No Meta Tag'; } next(); }); 

在我们的布局中,我们可以像访问视图模型的任何其他属性一样访问title属性。

 <title>{{title}}</title> 

作为参考, 这个答案提供了一个类似的解决scheme,除了它将req对象分配给res.locals