chovy
chovy

Reputation: 75686

using dustjs-linkedin templates in node.js and express3.x

I can't figure out how to use the dustjs-linkedin templates for express 3.x

 #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}

I get the following error when going to /test1

500 Error: Cannot find module 'dust'

Upvotes: 1

Views: 3899

Answers (3)

joakimbeng
joakimbeng

Reputation: 877

I had the same problems as you. And to ease the use of dustjs-linkedin together with express 3.x i put together the small library klei-dust. The library is simple to setup and you can set the root folder for views, which applies to base-templates and partials.

So if you have a views folder at views/ with home.dust and base.dust templates, the home.dust can look like this:

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

So there's no need to write views/base.dust for it to work.

Upvotes: 5

chovy
chovy

Reputation: 75686

I've managed to get a working version of dustjs-linkedin with consolidate module.

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

FYI, the layout has to be double quoted...that was a major gotcha for me, and its relative to app.js file, and it needs a trailing /

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

Upvotes: 3

JAiro
JAiro

Reputation: 5999

I will explain u how you should use express 3.x with dustjs-linkedin.

1) express has 2 config to set. 'view engine' and app.engine

"view engine" just sets the default and that app.engine just maps what engine to use for a given file extension.

so you should do something like this:

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

There is only one problem with this is that the method compileFromPath doesn't exist in dust :p.

You should add a method in the dust object with this signature that Express expects: (path, options, callback)

you can read more about this here: http://expressjs.com/api.html#app.engine.

Another option would be to use consolidate (http://spalatnik.com/blog/?p=54) but unfortunately Consolidate doesn't support the dustjs-linkedin version it only support the old dust version.

Upvotes: 0

Related Questions