我是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
提前感谢您的帮助。 :)
答案 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>
希望有所帮助