2012-02-09 84 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>