node.js + express.js + dust.js问题

时间:2012-05-24 09:18:51

标签: templates node.js express dust.js

快速问题:为什么不表达.js与dust.js一起运行? 我知道它不是官方支持的,但是dust.js甚至与我的node.js版本有问题 由于require.path问题,节点甚至不会启动。

server:testapp treejanitor$ node --version
v0.6.12

将应用引擎设置为灰尘时出现问题。 ( app.js in express)

var dust = require('dust');
...
app.set('view engine', 'dust');

我在这里显示控制台,为您提供简单的模块列表 此外,搜索相同问题的人可能会剪切/粘贴错误。

server:hummr treejanitor$ npm list
application-name@0.0.1 /Users/treejanitor/git/testapp/testapp
├── consolidate@0.3.0  extraneous
├── dust@0.3.0 
├─┬ express@2.5.8 
│ ├─┬ connect@1.8.7 
│ │ └── formidable@1.0.9 
│ ├── mime@1.2.4 
│ ├── mkdirp@0.3.0 
│ └── qs@0.4.2 
└─┬ jade@0.25.0 
  ├── commander@0.5.2 
  └── mkdirp@0.3.0

server:testapp treejanitor$ supervisor app.js

DEBUG: Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.
    at Function.<anonymous> (module.js:378:11)
    at Object.<anonymous> (/Users/treejanitor/git/testapp/testapp/node_modules/dust/lib/server.js:6:8)

我尝试了以下尝试而没有运气:
Dust.js load template from filesystem in Node.js

注意:我尝试了快递(3.0)的alpha版本没有帮助 mergeate.js和example中的所有模块也是如此。


我对node + express + dust感兴趣的一些原因:
LinkedIn picks dustjs
Twitter's Bootstrap framework

3 个答案:

答案 0 :(得分:4)

我曾经讨论过通过Express@3.0模块在​​Node.js 0.6.x上使用consolidate.js设置Dust.js。你可以read it here

但是,您可能希望使用LinkedIn's fork of Dust.js,它支持开箱即用的Node.js 0.6.x以及其他改进。

Consolidate.js已经支持该分叉,但您仍然需要Express@3.0才能工作。

答案 1 :(得分:2)

所以这就是诀窍 - 我以为我会分享我找到的东西 它需要找到这个块 - 如果你感兴趣的话,在页面中搜索dust-x。 http://nodejs.debuggable.com/2012-03-23.txt

要在快递应用中解决问题

cd node_modules
git clone git://github.com/laurie71/dust-x.git
git clone https://github.com/caolan/dustjs.git

dust.js的fork解决了node.js的require.paths问题 https://github.com/caolan/dustjs

灰尘的“包装”使其可用作模板引擎
(你仍然需要安装dust.js作为模块)
https://github.com/laurie71/dust-x

示例用法
https://gist.github.com/2174537

最重要的一点:

var dustx = require('dust-x');

...

// Configuration

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.register('.dust', dustx/*({})*/);
    app.set('view engine', 'dust');
    // app.set('view engine', 'jade');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express['static'](__dirname + '/public'));
});

顺便说一下,我想我可以手动修复其server.js中的dust.js问题,但我想给实际分配dust.js的人提供荣誉并公开提供解决方案。


PS:我仍然相当擅长在stackoverflow上发帖,所以如果我违反了一些礼仪,请告诉我。我在FAQ中读到鼓励回答你自己的问题,所以我想我会试一试。

特别是,我知道我的格式可能很弱。在答案中,我实际上更喜欢显示完整链接而不是指南建议的URL嵌入,因为它显示了包含网站的结构。随着站点URL被大脑吸收,它为您提供了更多机会作为下一次复飞的参考。 URL也相当短。 ; ^)非常感谢您的建议

“控制台”的格式通常是什么?代码?

答案 2 :(得分:2)

这可能是node.js和express.js版本的一个问题。我正在使用节点v0.10.9并表达v3.0.x,它们对我很有用。 为了将dust.js与express.js和node.js集成,我发现这个github repo是一个有用的资源,可以帮助你开始: https://github.com/chovy/express-template-demo (它使用了dust.js的linkedin fork)