Node.js + Express - 如何让Mustache部分工作?

时间:2012-04-27 21:23:06

标签: node.js express mustache

我正在尝试使用Express使Mustache正常工作,正如人们可以猜到的那样,我遇到了麻烦。

以下行初始化了Moustache很好并且干净。变量按预期呈现。

app.register('html', require(__dirname+'/public/js/libs/mustache.js'));

然而,当混合物中出现偏弯时,问题开始上升。使用Mustache,这里部分应该调用header view / partial。

{{> header}}

但唉,没有任何反应。 :/即使我直接提供部分,Mustache也无法呈现它。

app.get('/', function(req, res) {
    res.render('welcome', {
        partials: {
            header: '<h1>Header</h1>'           
        }
    });
});

所以,似乎部分根本不起作用。我发现一个黑客可以让部分工作有点起作用:

http://bitdrift.com/post/2376383378/using-mustache-templates-in-express

之后,部分渲染在渲染调用时直接提供(见上文),但是在将部分直接渲染到视图/布局时仍然无法实现:

布局看起来像这样:

Behold, the header
{{> header}}
<p>Let's move to more important stuff...</p>

标题视图如下所示:

<h1>Header</h1>

Express可以自己加载视图,但它不知道如何处理Mustache部分...

3 个答案:

答案 0 :(得分:2)

管理以使用最新版本的hogan-express。

https://github.com/vol4ok/hogan-express

所需要的只是安装hogan-express并将其用作express上的模板引擎。不需要黑客攻击或调整。

答案 1 :(得分:1)

使用express(至少为版本3)和mustache-express,您可以照常使用双胡须(以大于号开头)加载局部片段。

首先考虑以下内容附加在我们的app.js文件中:

/** import the module */

import mustache from 'mustache-express';

/** view engine setup */

app.engine('mst', mustache());
app.set('view engine', 'mst');
app.set('views', path.join(__dirname, 'mvc/views'));

/** the route where we will display the partials */

app.get('/', (req, res) => {
  let view = {
    title: 'Homepage',
    // ...
  };

  /** we are going to use a file called template.mst for rendering */
  res.render('template', view);
});

任何以大于号(即{{> file}})开头的双胡须将被视为partial。局部文件将在运行时呈现。将此文件视为我们要插入的部分文件:

mvc / views / partial.mst

<h2>418 | I'm a teapot</h2>

这是我们的模板:

mvc / views / template.mst

<h1>template.mst file</h1>

<!-- output: <h2>418 | I'm a teapot</h2> -->
{{> partial}}

答案 2 :(得分:0)

我不确定你./public/js/libs/mustache.js中到底是什么......我使用npm中的小胡子模块+模板对象you linked to的变体。

在任何情况下,您传递给app.register的对象都需要在某个时刻致电mustache.to_html(template, locals, partials)

你需要将partials对象作为第三个参数传递给mustache的to_html