【问题标题】:Is it possible to link a node.js file to HTML?是否可以将 node.js 文件链接到 HTML?
【发布时间】:2019-03-08 18:47:43
【问题描述】:

对使用 html 非常陌生,我想知道是否可以将节点文件链接到 HTML。我想要一个按钮,单击该按钮将运行节点文件中定义的函数。我想知道我的节点文件是否有节点包,如果出现任何问题。有什么帮助!

【问题讨论】:

  • Node 文档会告诉你很多你需要知道的东西。这可能是一个很好的起点nodejs.org/en/docs/guides/anatomy-of-an-http-transaction MDN 也很棒developer.mozilla.org/en-US/docs/Learn/HTML/…
  • 节点在服务器上运行,因此唯一的工作方式是通过 HTTP 请求。如果您还不了解 Ajax,请查看它。
  • @RobinZigmond 非常感谢!
  • @RobinZigmond 你说的没错,但我认为你可能错过了 OP 试图做的事情。可以在浏览器中使用 node.js 模块,如果它们被写入允许这样做的话。
  • @Duncan - 我同意这(可能)是他们想要的,但他们是否可以在浏览器中使用相同的文件取决于它的作用。如果它只是一个“香草”类型的 JS 库,例如。 lodash,那么是的,这很好——但如果它涉及特定于节点的 API(例如,连接到数据库或访问文件系统),那么就不能直接在浏览器中使用。当然,“Javascript 就是 Javascript”,但是浏览器和 Node 是完全不同的运行时环境,有很多东西在其中一个有意义,而另一个没有意义。而 HTTP 是连接这两个世界的唯一途径。

标签: javascript html node.js


【解决方案1】:

我认为您正在尝试执行以下操作:您有一些编写为在 Node.js 中运行的代码。假设代码包含在文件 aModule.js 中。问题是,如何从浏览器中调用该文件中定义的函数。第二个问题是,他们会跑吗?

首先,您当然可以像使用任何其他 javascript 一样,使用脚本标签将 aModule.js 导入您的浏览器。然后您可能能够访问模块中的功能,并且它们可能在浏览器中正确运行。这一切都取决于它们是否在考虑浏览器支持的情况下编写。我在下面给出一个例子,说明可以做到这一点的一种方式(不是唯一的方式)。

您必须查看正在使用的特定代码,以了解如何在浏览器中访问它。此外,如果编写的代码依赖于仅在 node 中可用的功能,您将不得不做更多的工作,可能需要修改代码才能使其运行。

在某些时候,“导入”机制将被标准化,所以这一切都会变得更容易,但现在它有点混乱。

这是一个可以在任一节点或浏览器中工作的模块示例。

// aModule.js - illustrates modularity that will work in browser or node  

"use strict";

var aModule = {}; // In browser, this will put aModule into global context

// "Closure" stops other stuff from being put into global context in browser
(function () {
    function getMessage() {
        return "Hello";
    }

    // other internal code not intended to be exposed can go here...
    // ...

    // and here is how we expose our getMessage function
    aModule.getMessage = getMessage;
})();

// If we are in node...
if (typeof module !== 'undefined' && module.exports) {
    // Export our module for use in node
    module.exports = aModule;
}

这里是你如何访问 node.js 中的功能:

var aModule = require("./aModule.js");
console.log (aModule.getMessage());

以下是您在浏览器中访问它的方式:

<!DOCTYPE html>
<html>
    <head>
        <title>Try out modularizing javascript in browser</title>
    </head>
    <body>
        <h2>Try modularization...</h2>
        <script src="aModule.js"></script> 
        <script>
            alert(aModule.getMessage());
        </script>
    </body>
</html>

还有一个提示 - 看看 Browserify 之类的工具。这些旨在将节点代码转换为可以在浏览器中运行的形式。您的里程可能会有所不同。

【讨论】:

  • 感谢您的冗长回复!我知道我可以将 js 文件链接到 html,但是如果 js 文件有节点包怎么办。当这个包含节点包(来自npm)的文件在html中链接时会有任何问题吗?
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2018-01-26
相关资源
最近更新 更多