2013-09-27 56 views
1

是否有一個模板引擎nodejs像razorengine這是專門輸出HTML但不限於HTML。所以我可以隨意創建JavaScript文件,就像我可以使用RazorEngine一樣?是否有像c#razorengine爲nodejs的模板引擎

一個例子,我很想能夠做到:

var fs = require('fs'); 
var engine = require('templatingEngine'); 

var template = "<p>Hello, <% name %></p>"; 
var data = [ 
    {id:"1", name: "bob"}, 
    {id:"2", name: "pete"}, 
    {id:"3", name: "jake"} 
    ]; 

var result = engine.parse(template, data); 

fs.writeFile("/tmp/hellos.html", result, function(err) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log("The file was saved!"); 
    } 
}); 

hellos.html ==> 

<p>Hello, bob</p> 
<p>Hello, pete</p> 
<p>Hello, jake</p> 
+0

這裏的區別是:我不希望僅僅使用html,我希望能夠生成任何基於html的腳本,並且引擎應該與向客戶端發送http響應分離開來......就像razorengine是... –

回答

2

通常,只有少數視圖引擎(如Jade)主要針對生成標記。大多數將使用某種形式的嵌入式語句 - 類似於剃刀的@...,如mustache{{...}} - 以支持模板化任何所需的文本內容。

而且,通常任何與請求/響應的耦合都將由http框架的一部分創建。使用Express,例如(參照app settingsapp.engine()):

app.set('view engine', 'jade'); 
app.engine('html', require('ejs').renderFile); 

確切API可以改變從一個視圖引擎到另一個。但是,隨着Handlebars,你可以這樣做:

var handlebars = require('handlebars'); 

var template = "{{#each this}}<p>Hello, {{name}}</p>{{/each}}"; 
var compiledTemplate = handlebars.compile(template); 

var data = [ 
    {id:"1", name: "bob"}, 
    {id:"2", name: "pete"}, 
    {id:"3", name: "jake"} 
    ]; 

var result = compiledTemplate(data); 

而且,對於視圖引擎的抽檢,consolidate project名單圍繞20

0

您已經AngularJS(和其他基於JavaScript引擎),可以呈現angularJS數據然後將其推到HttpResponse對象。它是爲客戶端設計的,但有些柚木可以在JavaScript服務器上運行

+0

是的,謝謝你,但我不認爲這將適用於任何非html和bes ides我想存儲結果不發送給客戶端。 –

+0

你可以存儲他們,它不會自動發送給客戶端 – sino

+0

我不得不承認,聽起來不錯,因爲我可以在我的模板中包含角度指令和過濾器,而無需滾動我自己的預處理器語言(因爲我正在考慮編寫我自己的引擎)。你能把我指向一個開始的方向嗎?我使用角度,但不知道如何在引擎蓋下工作? –

2

是有其稱爲razorjs並且可在github

+0

嘿,謝謝你提到RazorJS。迫不及待地嘗試一下。 –