2012-02-09 85 views
5

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

这里是我的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视图的指数级理解。谢谢。

回答

14

你需要让快递知道要使用点作为这样的模板引擎:

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

谢谢,这似乎工作。它总是退出来获取创建者的答案。我仍然需要弄清楚如何迭代我从mongodb中获得的记录,但这将是另一个问题......谢谢。 – user000001 2012-02-12 07:57:11

+0

嗨,也许你可以看看[这个](http://stackoverflow.com/questions/9252191/show-all-of-data-comming-from-mongodb-and-render-it-in-dot-js-模板引擎)的问题,它基于你在这里回答的问题。我认为你是最有资格解决这个问题的人。如果可以的话请帮忙。 – user000001 2012-02-12 20:06:16

+0

你可以请看看这个问题http://stackoverflow.com/questions/9252191/show-all-of-data-comming-from-mongodb-and-render-it-in-dot-js-templating-engine – user000001 2012-05-21 14:54:30

1

如果你正在运行快递3,它还不支持。但是,您可以使用快速点:

npm install express-dot

在配置

然后

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

然后在路线:

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

我的职位是一个无耻的插头,但它可能帮助别人出。

我也不是很满意的方式现有模块与快递3.X的工作,我写了一个叫点EMC:

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

用法类似于上面已经公布。安装它与名义:

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"}); 
}); 
+0

由于您的插件旨在帮助人们欢迎,毕竟这是本网站的全部重点,以帮助... – user000001 2013-02-10 16:12:59

+0

谢谢cue8chalk。这很难找到。 – Druska 2013-08-04 05:12:15

1

我知道这是一个老问题,但我最近想用标准生成的Express 4.xx应用程序测试doT。我没有找到来自@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' }); 
}); 

一定要记得用{{it.value}}在.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>