是否有像razorengine这样的nodejs的模板引擎,专门用于输出html但不限于html。所以我可以随意创建javascript文件,就像我可以使用RazorEngine一样?
我希望能够做到的一个例子:
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 :(得分:2)
通常,只有少数视图引擎(如Jade)主要用于生成标记。大多数人会使用某种形式的嵌入式语句 - 类似于Razor的@...
,例如mustache的{{...}}
- 来支持模板化任何所需的文本内容。
并且,通常任何与请求/响应的耦合都将由http
框架的一部分创建。例如,使用Express(参考:app settings,app.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个。
答案 1 :(得分:2)
是的,它的名字叫razorjs,可以在github上找到
答案 2 :(得分:0)
你已经有了AngularJS(以及其他基于javascript的引擎),你可以在angularJS中渲染数据,然后将其推送到httpresponse。它是专为客户端设计的,但有一些teaks它也可以在javascript服务器端工作