在node.js和express3.x中使用dustjs-linkedin模板

时间:2012-09-19 06:47:29

标签: node.js express dust.js

我无法弄清楚如何使用用于快递3.x的dustjs-linkedin模板

 #app.js
  var dust = require('dustjs-linkedin');

  app.set('view engine', 'dust');

  app.get('/test1', routes.test1);

#./routes/test.js
exports.test1 = function(req, res){
  res.locals.session = req.session;
  res.render('test1', { title: 'Test 1' } );
};

#./views/test1.dust
{+base.dust/}
{<main}
  Child Content
{/main}

#./views/base.dust
    {+main}
      Base Content
    {/main}

进入/ test1

时出现以下错误

500错误:无法找到模块&#39;尘埃&#39;

3 个答案:

答案 0 :(得分:5)

我和你有同样的问题。为了便于使用dustjs-linkedin和express 3.x,我将小型库klei-dust放在一起。该库易于设置,您可以设置视图的根文件夹,这适用于基本模板和部分文件。

因此,如果您在views/处有home.dustbase.dust模板的视图文件夹,则home.dust可能如下所示:

{>base/}
{<main}
Hello world
{/main}

因此无需编写views/base.dust即可使用。

答案 1 :(得分:3)

我已经设法通过整合模块获得了一个有效的版本的dustjs-linkedin。

https://github.com/chovy/express-template-demo

仅供参考,布局必须加双引号...这对我来说是一个主要问题,以及它与app.js文件的关系,它需要一个尾随/

{+"views/base.dust"/}
<p>Page content here</p>

答案 2 :(得分:0)

我将解释你应该如何使用express 3.x with dustjs-linkedin。

1)express有2个配置设置。 &#39;查看引擎&#39;和app.engine

&#34;查看引擎&#34;只需设置默认值,app.engine就会映射用于给定文件扩展名的引擎。

所以你应该做这样的事情:

   app.set('view engine', 'dustjs-linkedin');
   app.set('views', __dirname + '/views');
   app.engine('dust', dust.compileFromPath);

这只有一个问题,即compileFromPath方法不存在于尘埃中:p。

你应该使用Express期望的签名在尘埃对象中添加一个方法:(路径,选项,回调)

你可以在这里阅读更多相关信息:http://expressjs.com/api.html#app.engine

另一种选择是使用合并(http://spalatnik.com/blog/?p=54),但不幸的是,Consolidate不支持dustjs-linkedin版本,它只支持旧的防尘版本。