Du versuchst eine Socket-Verbindung auf einem seriellen Port (COM3) herzustellen, obwohl Sockets eher für die Kommunikation über Netzwerke genutzt werden. Du benötigst jedoch das SerialPort-Modul um mit lokalen Geräten zu kommunizieren.
const http = require("http");
const fs = require("fs");
const SerialPort = require("serialport");
const parsers = SerialPort.parsers;
const parser = new parsers.Readline({ delimiter: "\r\n" });
const port = new SerialPort("COM3", { baudRate: 9600 });
let index = fs.readFileSync("index.html");
const app = http.createServer(function (req, res) {
res.writeHead(200, { "Content-Type": "text/html" });
res.end(index);
});
const io = require('socket.io')(app);
io.on("connection", function (socket) {
console.log("Node is listening to port");
});
parser.on("data", function (data) {
console.log("Received data from port: " + data);
io.emit("data", data);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Ich habe es dir mal eingebunden und mal bei testweise laufen lassen kannst. Du könntest auch die nativen Node.js-Sockets verwenden, sprich ohne HTTP zu nutzen. Vielleicht reicht es dir aber schon so. Probier es einfach mal aus.
Nachtrag: Wenn es noch kürzer sein soll, kannst du auch bloß das Socket.io-Modul verwenden. In dem Fall dann alles über dieses Modul verwaltet wird, also der Socket-Server und die Kommunikation zu deinem Frontend (index.html).
JavaScript:
const fs = require("fs");
const SerialPort = require("serialport");
const parsers = SerialPort.parsers;
const parser = new parsers.Readline({ delimiter: "\r\n" });
const port = new SerialPort("COM3", { baudRate: 9600 });
const io = require("socket.io")();
parser.on("data", function(data) {
console.log("Received data from port: " + data);
io.emit("data", data);
});
io.on("connection", function(socket) {
console.log("Node is listening to port");
});
io.listen(3000, () => {
console.log('Server is running on port 3000');
});
HTML:
const socket = io('http://localhost:3000');
socket.on('data', function(data) {
const dataList = document.getElementById('sample');
const listItem = document.createElement('li');
listItem.textContent = data;
dataList.appendChild(listItem);
});