如何使用 html 按钮执行节点功能

How to execute node function using html button

我是 nodejs 的新手,我想使用 node 写入串行端口,但现在我希望它由按钮触发。数据来自文本框。 当我在 console/terminal 中 运行 时,我的节点脚本运行良好。但是不能用网页中的按钮来做到这一点。 这是我嵌入 html

的 nodejs
<!DOCTYPE html>
<html>
<head>
    <title>Node x HTML</title>
</head>
<body>

    <script>
    function write_serial() 
    {
        var serialport = require("serialport");
        var SerialPort = serialport.SerialPort;

        var sp = new SerialPort("/dev/ttyACM0", {
          baudrate: 9600,
          parser: serialport.parsers.readline("\n")
        });

            var text = document.getElementById("textbox1").value;

            sp.on('open', function() 
            {
                sp.on('data', function (data) 
                {
                    sp.write(name);
                });
            });
    }

    </script>

    <Input Type = "text" id = "textbox1" >
    <BR>
    <br><button onclick="write_serial();" href="javascript:;">Go!</button>
</body>
</html>

这是我打开页面控制台 (F12) 时出现的错误

ReferenceError: require is not defined

在此先感谢您的帮助。 :)

Node.js是一个宿主环境,可以执行JS,提供Node.js具体API。浏览器,是一个不同的托管环境,具有不同的 API。不能在浏览器中使用Node的特定API,使用NodeAPI的JS会导致浏览器报错

例如,您的脚本正在使用全局 require 函数,该函数在浏览器 API 中不可用。这就是为什么:

ReferenceError: require is not defined

相反,您的脚本也无法在 Node 上执行,因为它使用浏览器 API:

document.getElementById("textbox1")

您在一个脚本中混合了来自不同环境的 API。

但是,如果您的 JS 脚本不使用特定于 Node 或浏览器的 API,它可以在 Node 和浏览器中执行而不会出错。但是你的脚本不是这样。

您的问题的解决方案可以是将您的脚本拆分为两个单独的脚本,运行 一个在浏览器中,另一个在 Node.js 中,并使用 [=] 在它们之间交换数据13=].

NodeJS 是一个 non-browser JavaScript 环境。您不能在浏览器环境中使用大多数 NodeJS 功能,因为它们不是为此而设计的。

相反,您将有一个本地 NodeJS 进程提供 Web 端点(例如,Web 服务器;也许使用 Express,但您不必这样做)并且 运行 该 NodeJS 进程正在监听对于网络请求。然后,您的网页上会有一个按钮,可以 ajax 调用执行工作的 NodeJS 服务器。

当然,这只会让您在服务器进程 运行ning 所在的机器上执行工作。

也许从https://wzrd.in/standalone/serialport@latest

导入串口模块

另一方面,尝试将逻辑与视图分开,我不知道你的应用程序是否会增长或者它是否只是一个 POC,但使用 messageBroker 或套接字将你的动作视图与引擎绑定?

希望对您有所帮助