如何在nodejs中渲染doT.js模板?

嗨,我想知道如何渲染dot.js模板引擎的输出。 我认为这是关于nodejs模板的一个通用的问题。(阅读评论的更多信息)。 我之所以select这个模板引擎而不是玉器或ejs,是因为它似乎是最快的引擎。

这是我的app.js:

var express = require('express'), app = express.createServer(), doT = require('doT'), pub = __dirname + '/public', view = __dirname + '/views'; app.configure(function(){ app.set('views', view); app.set('view options', {layout: false}); app.set('view engine', 'dot'); app.use(app.router); }); app.register('.html', { compile: function(str, opts){ return function(locals){ return str; } } }); app.get('/', function(req, res){ //This is where I am trying to send data to the front end.... res.render('index.html', { output: 'someStuff' }); }); 

这是我的html:

 <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>Index</title> </head> <body> //This is where I am trying to receive data and output it... {{=it.output}} </body> </html> 

我只是找不到好的文档。 这还不够: http : //olado.github.com/doT/ 。 如果可以的话请帮忙。 这将会提高我对数据如何传递到nodejs视图的指数级理解。 谢谢。

       

网上收集的解决方案 "如何在nodejs中渲染doT.js模板?"

你需要让expression知道使用doT作为模板引擎是这样的:

 app.set("view engine", "html"); app.register('.html', doT); 

我的post是一个无耻的插件,但它可能帮助别人。

我对现有模块使用Express 3.x的方式并不满意,我写了一个名为dot-emc的模块:

https://github.com/nerdo/dot-emc

用法类似于上面发布的内容。 安装与nom:

 npm install dot-emc 

然后将其设置为您的默认视图引擎。 我更喜欢使用.def扩展名,因为我的文本编辑器将.dot文件识别为Graphviz文件,所以语法略有不同:

 app.engine("def", require("dot-emc").__express); app.set("view engine", "def"); 

然后,您可以像使用路由中的其他任何视图引擎一样开始使用它,例如:

 app.get("/", function(req, res) { res.render("index", {"title": "title goes here"}); }); 

如果你正在运行express 3,那还不支持。 你可以使用express-dot:

npm install express-dot

然后在configuration

 app.set('view engine', 'dot' ); app.engine('dot', require('express-dot').__express ); 

然后在路线:

 res.render('profile', {}); // you will need to create views/profile.dot 

我知道这是一个老问题,但我最近想用标准生成的Express 4.xx应用程序来testingdoT。 我没有find来自@olado的快速示例,以便与我生成的应用程序轻松匹配。 我尝试了不同的插件(得到它的工作,但不满意),所以我最终编写了这样的模板引擎,以获得预编译的点文件支持包括(#)没有任何额外的插件:

 var users = require('./routes/users'); // Standard app above this var dot = require("dot").process({ path: (__dirname + "/views") }); var app = express(); // view engine setup app.engine('dot', function(template, options, cb){ // using .dot files var temp = path.parse(template).name; var cont = dot[temp](options); return cb(null, cont); // Or as one liner // return cb(null, dot[path.parse(template).name](options)); // If you want to do error checking, return the error as callback functions first arg // return cb(new Error('Something went wrong'); }); app.set('views', path.join(__dirname, './views')); app.set('view engine', 'dot'); // Standard generated app below this 

现在我可以在像这样的路由中使用标准的“res.render”方法(对于index.js):

 /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); 

请记住在.dot模板文件中使用{{it.value}}。 在上面的基本示例中,index.dot看起来像这样:

 <!DOCTYPE html> <html> <head> <title>{{=it.title}}</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1>{{=it.title}}</h1> <p>Welcome to {{=it.title}}</p> </body> </html>