Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从现有文件加载模板_Node.js_Handlebars.js - Fatal编程技术网

Node.js 从现有文件加载模板

Node.js 从现有文件加载模板,node.js,handlebars.js,Node.js,Handlebars.js,我在NodeJS应用程序中使用handlebar作为模板引擎 我已将所有模板放在视图文件夹中,如下所示: - - /controllers - /views - index.html - server.js 以下是我的代码,用于在用户访问给定URL时呈现模板(使用express进行路由): 我正在尝试从文件渲染模板,但它不起作用。这是我访问/URL时浏览器直接输出的内容: views/index.html 这很有意义,因为它直接将给定参数解释为字符串,而不是外部模板的路径

我在NodeJS应用程序中使用
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
});