Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用html按钮执行节点函数_Javascript_Html_Node.js_Node Serialport - Fatal编程技术网

Javascript 如何使用html按钮执行节点函数

Javascript 如何使用html按钮执行节点函数,javascript,html,node.js,node-serialport,Javascript,Html,Node.js,Node Serialport,我是nodejs的新手,我想使用node写入串行端口,但现在我想让它由一个按钮触发。数据来自一个文本框。 当我在控制台/终端中运行节点脚本时,它运行得很好。但不能用网页上的按钮。 下面是嵌入在html中的nodej <!DOCTYPE html> <html> <head> <title>Node x HTML</title> </head> <body> <script>

我是nodejs的新手,我想使用node写入串行端口,但现在我想让它由一个按钮触发。数据来自一个文本框。 当我在控制台/终端中运行节点脚本时,它运行得很好。但不能用网页上的按钮。 下面是嵌入在html中的nodej

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

提前感谢您的帮助。:)

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

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

ReferenceError:未定义require

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

document.getElementById(“textbox1”)

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

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


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

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

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


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

可能从导入serialport模块

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


希望能有所帮助

嗨,谢谢你的回复。我实际上想要另一个设备(也连接到同一个网络)来访问该网页。对于像我这样的初学者来说,Express是最好的解决方案吗?@Blanket:不能说“最好”,但它使用起来相当简单,并且经常用于使用NodeJS构建web服务器。嗨,只是想补充一些问题,你能给我一些简单教程的链接吗?如果没有Express,如何做到这一点。对于像我这样的初学者来说,我看到的所有链接都很混乱。提前谢谢。嗨,谢谢你的回复。在你的上一段中,你的意思是我需要打开控制台/终端来运行NodeJS脚本(我将从tag中分离出来的NodeJS脚本)?@Blanket,不,这比这要多一些工作。您必须设置一个可以侦听http连接的服务器,我可以在不安装其他模块(如Express)的情况下执行此操作吗?我实际上想要另一个设备(也连接到同一个网络)来访问该网页。对于像我这样的初学者来说,Express是最好的解决方案吗?更简单的方法是什么?谢谢。@Blanket,我链接的文章介绍了如何在没有expressHi的情况下设置基本服务器,谢谢。我接受了你的回答,因为你给了我一个有用的链接。我将首先学习http请求。我想这可能会有帮助。非常感谢您的努力。:)嗨,谢谢你的回复。你的链接也意味着嘿:)是的,同样的事情!我不喜欢那些没有任何解释就把-1放进去的人:(我不知道,兄弟,我不是那个把-1放在你身上的人。
ReferenceError: require is not defined