私はノードとエクスプレスを最も単純なものから学んでおり、ビューをレンダリングするときにres.render('view',{data:data})
、ビューに収まるのはヒスイのようなテンプレートエンジンだけです。通常のhtmlは使えないのですか?
2 に答える
できますが、これは私がNodeを学習しているときに遭遇した問題です。テンプレートエンジンを使用したくない場合でも、Nodeに静的な方法でHTMLファイルのコンテンツを吐き出させることができます。例(非常に基本的な例):
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');
Nodeの優れている点は、テンプレートをロジックから分離する必要があることです(ある程度までは、とにかく多くのロジックをテンプレートに詰め込むことができます)。
私はJadeが好きではなく、クライアント側のEJSがサーバー側とは異なり、ブラウザーでテンプレートを実際に再利用できないことが判明するまでEJSを使用していました(ページのレンダリングを開始するときに必ず必要になるため)ブラウザで)。単純なEJSテンプレートを再利用することはできますが、パーシャルを含むテンプレートを再利用することはできません(ほとんどのテンプレートがそうであるように)。
多くの検索と試行錯誤の末、非常に高速(実際には最速)、軽量(JavaScriptのわずか140行)で、Expressに簡単に統合できるdoTテンプレートを使用することになりました(以下を実行することにより)統合のパターン-統合をdoTで直接使用することはまだできません)、ブラウザーで使用できます(パーシャルをロードする機能は異なる必要がありますが、これも簡単です)。
doTには、他のテンプレートエンジンには見られない機能があるようです。非常にエレガントな構文で、ハンドルバー(私のお気に入り)に最も近いですが、内部で通常のJavaScriptを使用できます(そのため、最初にEJSを選択しました)。