代码之家  ›  专栏  ›  技术社区  ›  chovy

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

  •  1
  • chovy  · 技术社区  · 14 年前

    我不知道如何使用express3.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错误:找不到模块“dust”

    3 回复  |  直到 14 年前
        1
  •  5
  •   joakimbeng    14 年前

    我和你有同样的问题。为了方便使用dustjs linkedin和express3.x,我把这个小图书馆放在了一起 klei-dust 。该库设置简单,您可以设置视图的根文件夹,该文件夹适用于基本模板和局部。

    因此,如果您在 views/ 具有 home.dust 和 base.dust 模板 主页.dust 可以是这样的:

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

    所以没有必要写 views/base.dust 让它发挥作用。

        2
  •  3
  •   chovy    14 年前

    我已经设法获得了一个带有合并模块的工作版本的dustjs-linkedin。

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

    仅供参考,布局必须双重引用。。。这对我来说是一个很大的问题,它与app.js文件有关,需要一个尾随/

    {+"views/base.dust"/}
    <p>Page content here</p>
    
        3
  •  0
  •   JAiro    14 年前

    我将向您解释如何使用带有dustjs linkedin的express3.x。

    1) express有2个配置要设置查看引擎和app.engine

    “视图引擎”只是设置默认值,而app.engine只是为给定的文件扩展名映射要使用的引擎。

    所以你应该这样做:

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

    只有一个问题是compileFromPath方法在dust中不存在:p。

    您应该在带有Express期望的签名的dust对象中添加一个方法:(路径、选项、回调)

    您可以在此处阅读更多信息: http://expressjs.com/api.html#app.engine 。

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

    推荐文章