javascript - 使用把手在 .hbs 文件之间进行链接的最简单方法是什么?
问题描述
我是车把的完整初学者,我正在尝试修改从glitch.com 上的示例中获取的简单车把模板
我希望能够在文件之间进行链接,.hbs
就像在文件之间进行链接一样,.html
但是当我尝试时,我会收到消息cannot GET
,然后是我提供给它的任何文件。
这是我对 ref 的整体结构的抓取;
这是index.hbs
我正在使用的文件
<!DOCTYPE html>
<html>
{{> head }}
<body>
<a href="views/secondpage.hbs">Link to second page</a>
</body>
</html>
我想链接到(例如)这个secondpage.hbs
文件;
<!DOCTYPE html>
<html>
{{> head }}
<body>
<a href="views/index.hbs">Link back to index</a>
</body>
</html>
这是我server.js
文件中的代码
// Generic node.js express init:
const express = require('express');
const app = express();
app.use(express.static('public'));
const hbs = require('hbs');
hbs.registerPartials(__dirname + '/views/partials/');
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');
app.get("/", (request, response) => {
let dt = new Date();
let data = {
projectName: process.env.PROJECT_DOMAIN,
luckyNumber: Math.floor(Math.random()*1000),
serverTime: new Date(),
ip: (request.headers["x-forwarded-for"]||"").split(",")[0]
};
data.json = JSON.stringify(data, null, 2);
response.render('index', data);
});
let listener = app.listen(process.env.PORT, () => {
console.log('Your app is listening on port ' + listener.address().port);
});
和我的代码watch.json
{
"install": {
"include": [
"^package\\.json$",
"^\\.env$"
]
},
"restart": {
"exclude": [
"^public/",
"^dist/"
],
"include": [
"\\.js$",
"\\.hbs$",
"\\.json"
]
},
"throttle": 100
}
如果需要其他文件的任何详细信息来提供帮助,请告诉我,我可以提供。
我很感激我可能以错误的方式思考这个问题,我已经更详细地研究了车把并尝试了助手等。但对于我想要实现的目标来说,它似乎过于复杂,我认为你可以html
在hbs
文件中编写基本内容?我正在寻找最直接、最通用的解决方案来解决车把中视图之间的链接问题。
FWIW 我想以一种非常简单的方式使用车把,基本上只是想拥有相当于php includes
using的功能partials
,所以如果有更好的方法来创建应用程序时考虑到这一点,我将不胜感激。
解决方案
你的代码看起来不错。究竟是什么问题?当您添加{{> head}}
部分时,index.hbs
它不会正确呈现吗?
编辑:
好的,您的代码主要有两个问题:
- 您没有在
express
链接到/secondpage
端点时定义路由。 - 您正在尝试链接到文件
<a href="views/secondpage.hbs">Link</a>
而不是链接到 URL 端点<a href="/secondpage">Link</a>
。
要修复您的代码,您必须定义链接到handlebars
文件的端点,因此您需要将server.js
文件更改为类似的内容。
const express = require('express');
const hbs = require('hbs');
const app = express();
app.use(express.static('public'));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');
hbs.registerPartials(__dirname + '/views/partials/');
// 1st Page Route (URL Endpoint)
app.get('/', (request, response) => {
const data = {
projectName: process.env.PROJECT_DOMAIN,
luckyNumber: Math.floor(Math.random() * 1000),
serverTime: new Date(),
ip: (request.headers['x-forwarded-for'] || '').split(',')[0],
};
data.json = JSON.stringify(data, null, 2);
response.render('index', data);
});
// 2nd Page Route (URL Endpoint)
app.get('/secondpage', (request, response) => {
response.render('secondpage');
});
const listener = app.listen(process.env.PORT, () => {
console.log('Your app is listening on port ' + listener.address().port);
});
然后您需要在以下位置修复指向此的 HTML 链接index.hbs
:
<!DOCTYPE html>
<html>
{{> head }}
<body>
<a href="/secondpage">Link to second page</a>
</body>
</html>
这在secondpage.hbs
:
<!DOCTYPE html>
<html>
{{> head }}
<body>
<a href="/">Link back to index</a>
</body>
</html>
希望这对您有所帮助。
推荐阅读
- php - 作为 PHP 类属性的可调用函数
- java - Job Java Quartz中的“执行”函数返回一个值?
- jql - 想要获取属于 Jira 中多个项目的所有用户
- php - wocommerce 计算运费不被调用
- android - 如何根据动态 HTML 在 Xamarin.Android(或 Android)中自动调整 WebView 的高度?
- powershell - 通过 cmd 运行带引号的 powershell 命令
- javascript - 获取异常“IFeatureCollection 已被处置。对象名称:'Collection'。” 在 .net core 3.1 中更新会话
- python-3.x - 为什么 Kivy FocusBehavior 应用于按钮不起作用?
- verilog - Verilog:在总是块中重新分配变量
- c++ - 在 HDFS 上打开 RocksDB 时核心转储