Node.js 从现有文件加载模板
我在NodeJS应用程序中使用Node.js 从现有文件加载模板,node.js,handlebars.js,Node.js,Handlebars.js,我在NodeJS应用程序中使用handlebar作为模板引擎 我已将所有模板放在视图文件夹中,如下所示: - - /controllers - /views - index.html - server.js 以下是我的代码,用于在用户访问给定URL时呈现模板(使用express进行路由): 我正在尝试从文件渲染模板,但它不起作用。这是我访问/URL时浏览器直接输出的内容: views/index.html 这很有意义,因为它直接将给定参数解释为字符串,而不是外部模板的路径
handlebar
作为模板引擎
我已将所有模板放在视图
文件夹中,如下所示:
-
- /controllers
- /views
- index.html
- server.js
以下是我的代码,用于在用户访问给定URL时呈现模板(使用express
进行路由):
我正在尝试从文件渲染模板,但它不起作用。这是我访问/
URL时浏览器直接输出的内容:
views/index.html
这很有意义,因为它直接将给定参数解释为字符串,而不是外部模板的路径
如何将模板文件(在本例中为views/index.html
中的文件)加载到变量中,以便随后呈现模板
我发现的唯一示例是将所有模板存储在一个文件中,并通过AJAX加载它们,但所有这些示例都来自“前端”把手,而不是与Node一起使用时
有可能实现我想要的吗?我查看了文档,但很难找到关于带NodeJS的把手的好信息。使用把手,你必须自己加载文件,或者你可以预编译文件(可能使用grunt/gulp)。我觉得使用swig()更方便() 它使用起来非常简单。如果您愿意,它还与express集成
var swig = require('swig');
swig.renderFile('/path/to/template.html', {
pagename: 'awesome people',
authors: ['Paul', 'Jim', 'Jane']
});
就你而言
app.get("/", function(req, res){
res.send(swig.renderFile('views/index.html', {"name": "Charles"}));
});
根据您的描述,听起来您希望将车把作为具有动态视图的视图引擎。您不需要手动执行此操作,下面是一个示例(使用):
太棒了,我已经很熟悉Twig了,所以Swig应该不太难适应。我刚刚尝试了你的代码,效果很好,我选择了车把,因为这是我第一次看到它,但我肯定会研究Swig,考虑到它的易用性,我可能会改用它!谢谢!酷,是的,我也习惯Twig,所以Swig jus如果它是正确的答案,记得把它标记为正确的答案,这样其他人可以从中受益。
app.get("/", function(req, res){
res.send(swig.renderFile('views/index.html', {"name": "Charles"}));
});
var handlebars = require('express-handlebars');
app.engine('.html', handlebars({layout: false, extname: '.html'}));
app.set('view engine', '.html');
app.get("/:view", function(req, res){
var view = req.params.view;
res.render(view, { "name": "Charles" }); // Whatever data you want
});