Node.js:如何将Node.js嵌入到HTML中?

时间:2011-05-18 20:53:57

标签: html node.js markup

在php文件中,我可以这样做:

<p><?php echo "hello!";?></p>

有没有办法在节点中执行此操作,如果是,它的逻辑是什么?

我知道如何做到这一点:

  • 在HTML文件中为节点使用标识符标记,例如:<node>code</node>

  • Load&amp;在Node

  • 中解析HTML文件
  • 从HTML文件中抓取节点标记并运行它

但我不确定这是否是最好的方式,或者即使它有效:)

请注意我想学习node.js,所以表达和其他库和模块不是我的答案,因为我想知道这个过程的逻辑。

3 个答案:

答案 0 :(得分:18)

您对node.js预处理器的描述/要求。 It does exist但它被认为是有害的。

更好的解决方案是使用express中使用的视图。看看screencasts

如果你必须从头开始做所有事情,那么你可以编写一个微模板引擎。

function render(_view, data) {
    var view = render.views[view];
    for (var key in data) {
        var value = data[key];
        view.replace("{{" + key + "}}", value);
    }
    return view;
}

render.views = {
    "someView": "<p>{{foo}}</p>"
};

http.createServer(function(req, res) {
    res.end(render("someView", {
        "foo": "bar" 
    }));
});

将php / asp / js代码与HTML直接混合的原因很不错。它不会促进关注的分离并导致意大利面条代码。这些天的标准方法是如上所述的模板引擎。

想要了解有关微模板的更多信息? Read the article by J. Resig

答案 1 :(得分:4)

您可以尝试使用JooDee,这是一个节点网络服务器,允许您在网页中嵌入服务器端javascript。如果您熟悉Node和PHP / ASP,那么创建页面就是轻而易举的事。以下是一个页面如下所示的示例:

<!DOCTYPE html>
<html>
<:  //server side code in here
    var os = require('os');
    var hostname = os.hostname();
:>
<body>
    <div>Your hostname is <::hostname:></div>
</body>
</html>

使用JooDee还可以通过将属性附加到“客户端”对象服务器端,并在客户端javascript中访问生成的“客户端”对象,将服务器javascript变量公开给客户端。

https://github.com/BigIroh/JooDee

答案 2 :(得分:1)

使用模板引擎。从终端

npm install ejs

在代码中:

var ejs = require('ejs');

var options = {
  locals: {
    foo: function() { return "bar"; }
  }
};

var template = "<p><%= foo() %></p>";
console.log(ejs.render(template, options));