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

18

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

<p><?php echo "hello!";?></p>
有没有在Node中这样做的方法?如果有,它的逻辑是什么?
我有一个想法可以实现:
1. 在HTML文件中使用标识符标记节点,如:<node>code</node> 2. 在Node中加载和解析HTML文件 3. 从HTML文件中获取节点标记并运行它
但我不确定这是否是最佳方式,甚至是否可行 :)
请注意,我想学习 node.js,因此express和其他库和模块对我来说不是答案,因为我想知道这个过程的逻辑。

加入我们的 node.js 聊天室 ;) - Raynos
这个问题与嵌入式系统编程无关,因此我已经将标签移除。请查看http://stackoverflow.com/tags/embedded/info - uɐɪ
3个回答

20

您描述/询问的是一个Node.js预处理器。它确实存在,但被认为是有害的。

更好的解决方案是使用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混合使用是不好的,这样做不利于关注点分离,会导致代码混乱。现在的标准方法是使用像上面那个一样的模板引擎。

想了解更多关于微型模板的知识吗?阅读J. Resig的文章


е—Ё@RaynosпјҢдҪ иғҪи§ЈйҮҠдёҖдёӢеҰӮдҪ•дҪҝз”ЁиҝҷдёӘжЁЎжқҝеј•ж“Һд»Һ.htmlж–Ү件дёӯжү§иЎҢдёҖдёӘnode.jsе‘Ҫд»Өеҗ—пјҹжҲ‘зҗҶи§ЈиҝҷеҸӘжҳҜе°Ҷfooжӣҙж”№дёәbarпјҹиҝҳжҳҜжҲ‘еҸҲиҜҜи§ЈдәҶд»Җд№Ҳпјҹ - Adam Halasz
@CIRK 使用更大的模板引擎。Mustache、EJS、Jade、jQuery templ等。看看express screencasts,同时使用它,它有一个很棒的视图引擎。 - Raynos
1
你好。3个链接中有2个已经失效了。我不知道它们是否可以修复,但我很想获取那些资料 :) - Gui Imamura

6

您可以尝试使用JooDee,它是一个Node Web服务器,允许您在Web页面中嵌入服务器端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变量附加到“Client”对象上,然后在客户端javascript中访问生成的“Client”对象,从而向客户端公开这些变量。请参考https://github.com/BigIroh/JooDee

在大学时,我和我的朋友写了这个程序,但我们还没有意识到我们所做的事情是有害的!请不要使用它。 - mako-taco
@maco-taco 如果你能够通过重新解释HTML并仅替换文本节点来优美地完成它,那么我认为这并不是非常糟糕的。 - peterh

2
使用模板引擎。从终端执行。
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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接