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

时间:2017-01-14 08:04:46

标签: javascript html node.js node-serialport

我是nodejs的新手,我想使用节点写入串口,但现在我希望它由一个按钮触发。数据来自文本框。 我在控制台/终端中运行它时,我的节点脚本运行正常。但是不能通过网页中的按钮来实现。 这是我的nodejs嵌入在html

<!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

提前感谢您的帮助。 :)

3 个答案:

答案 0 :(得分:1)

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

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

当然,这只允许您在运行服务器进程的机器上执行工作。

答案 1 :(得分:0)

Node.js是一个托管环境,可以执行JS并提供Node.js特定的API。浏览器,是一个不同的托管环境,具有不同的API。您无法在浏览器中使用Node的特定API,使用Node API的JS将导致浏览器出错。

例如,您的脚本使用全局require功能,该功能在浏览器API中不可用。这就是原因:

  

ReferenceError:未定义require

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

  

的document.getElementById(&#34; TextBox1的&#34)

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

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

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

答案 2 :(得分:-1)

可能从https://wzrd.in/standalone/serialport@latest

导入serialport模块

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

希望有所帮助