是否有类似c#razorengine的模板引擎用于nodejs

时间:2013-09-27 19:51:39

标签: c# javascript node.js

是否有像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>

3 个答案:

答案 0 :(得分:2)

通常,只有少数视图引擎(如Jade)主要用于生成标记。大多数人会使用某种形式的嵌入式语句 - 类似于Razor的@...,例如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个。

答案 1 :(得分:2)

是的,它的名字叫razorjs,可以在github上找到

答案 2 :(得分:0)

你已经有了AngularJS(以及其他基于javascript的引擎),你可以在angularJS中渲染数据,然后将其推送到httpresponse。它是专为客户端设计的,但有一些teaks它也可以在javascript服务器端工作