javascript - 如何使用html按钮执行 Node 功能

标签 javascript html node.js node-serialport

我是nodejs的新手,我想使用node写入串行端口,但现在我希望它由按钮触发。数据来自文本框。 当我在控制台/终端中运行我的 Node 脚本时,它运行良好。但无法通过网页中的按钮来做到这一点。 这是我嵌入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,使用Node API的JS会导致浏览器出错。

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

ReferenceError: require is not defined

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

document.getElementById("textbox1")

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

但是,如果您的 JS 脚本不使用 Node 或浏览器特定的 API,则它可以在 Node 和浏览器中执行而不会出现错误。但您的脚本并非如此。

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

关于javascript - 如何使用html按钮执行 Node 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647971/

相关文章:

html - 将类 "form-group-row"插入 "form-horizontal"

node.js - Express res header 事件不再触发

node.js - 未设置 Cookie,即使它在响应 header 中。使用快速 session cookie

javascript - 爬虫中如何同步获取和保存

javascript - 滚动时在视口(viewport)上正确对齐 div

JavaScript - 为写在 contenteditable div 中的每个字母添加跨度

html - Firefox 在计算父 div 大小时不考虑垂直滚动条宽度

node.js - 如何在 Promise then 方法中将元素推送到数组上

javascript - 具有特殊样式的背景 url

javascript - 为什么 jQuery 在 jSfiddle 中有效但在站点中无效?