2013-02-25 61 views
1

我正在學習節點,並從最簡單的表達和使用res.render('view',{data:data})呈現視圖時,它只是一個模板引擎,如玉,適合視圖。我可以不使用正常的HTML嗎?我只需要使用快速渲染的模板語言?

+0

這取決於視圖引擎。 Jade允許使用[文字HTML](https://github.com/visionmedia/jade#a6-10)。雖然,如果你的意思是*只是* HTML,那麼[更好的選擇](http://www.senchalabs.org/connect/static.html)。而且,如果您的意思是「*主要是HTML *」 - 例如'

{{key}}
'或'
<%= key %>
',那麼[其他模板引擎](https://github.com/visionmedia/consolidate.js#supported-template引擎)你可以選擇。 – 2013-02-25 08:11:51

+0

你總是可以'res.write()'HTML。 – 2013-02-25 08:49:30

回答

1

你可以,但這是我在學習Node時碰到的一個問題。如果您不想使用模板引擎,則仍然可以讓Node以靜態方式吐出HTML文件的內容。例如(非常基本的EXAMLE):

var base = '/path/to/your/public_html', 
    fs = require('fs'), 
    http = require('http'), 
    sys = requrie('sys'); 

http.createServer(function (req,res) { 
    path = base + req.url; 
    console.log(path); 

    path.exists(path, function(exists) { 
    if(!exists) { 
     res.writeHead(404); 
     res.write('Bad request: 404\n'); 
     res.end(); 
    } else { 
     res.setHeader('Content-Type','text/html'); 
     res.statusCode = 200; 
     var file = fs.createReadStream(path); 
     file.on("open",function() { 
     file.pipe(res); 
     }); 
     file.on("error",function(err) { 
     console.log(err); 
     }); 
    } 
    }); 
}).listen(80); 

console.log('server on tcp/80'); 
0

有關節點的偉大的事情是,它迫使你從邏輯模板分離(到一定程度,可以擠大量的邏輯爲模板反正)。

我不喜歡Jade並使用EJS,直到事實證明客戶端EJS與服務器端不同,並且您無法真正在瀏覽器中重新使用模板(正如您在某些時候肯定希望的那樣,你開始在瀏覽器中渲染頁面)。您可以重新使用簡單的EJS模板,但不能重複使用帶有部分的模板(因爲大部分模板都是)。

經過大量的搜索和反覆試驗,我最終使用了非常快速(實際上速度最快)的doT模板,輕量級(只有140行JavaScript)可以輕鬆地集成到Express(按照合併模式 - 你不能直接與doT合併),可以在瀏覽器中使用(加載部分的函數必須不同,但它很容易)。

doT似乎有我在其他模板引擎中沒有看到的功能,它有一個非常優雅的語法,它最接近handlebars(我的最愛),但仍然允許正常的JavaScript內部(這就是爲什麼我在第一個選擇EJS地點)。