gpt4 book ai didi

node.js - Nodejs + Handlebars - 拉取当前 url 路径并传递给 Helper

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:15 24 4
gpt4 key购买 nike

我正在尝试创建一个元标记 Handlebars 助手,它获取 url 路径名并将该值用于 switch 语句,然后将字符串返回到 HTML head 中的元标记,但我不确定当前获取 switch 语句的 url 路径的最佳方法。我尝试了 window.location.pathname,但收到 window 未定义的错误。我知道路径模块要求您向其传递一些内容以进行解析,但我不确定最佳值是多少。谁能帮我吗?

这是我的 Handlebars 辅助文件:

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 对象获取 URL 路径。幸运的是,在Express Request 对象有一个 path属性。

但是,为了将您的解决方案实现为 Handlebars 助手,您需要找到一种方法将 Request 对象(或至少其 .path)从 View 传递给助手。我认为更好的解决方案是在呈现响应之前执行辅助逻辑并构造标题。

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

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

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

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

仅供引用,this answer提供了类似的解决方案,只不过它将 req 对象分配给 res.locals

关于node.js - Nodejs + Handlebars - 拉取当前 url 路径并传递给 Helper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com