失败:WebSocket握手期间出错:意外的响应代码:使用Arduino的400

时间:2019-02-27 11:34:13

标签: javascript node.js socket.io arduino

我正在尝试设置Node.js本地服务器,以便从通过串行端口(使用USB)连接的Arduino收集数据。

我正在使用socket.io来连接服务器和客户端,使用Node.js读取数据,然后将其发送到客户端网页。

上个月,代码运行良好,现在(完全没有任何更改),我尝试运行它,但出现此错误。

我使用了一些测试日志,并且连接似乎正常(正在打印“ 1连接”)。

这是Node.js代码:

var http = require("http");
var url = require('url');
var fs = require('fs');
var io = require('socket.io');
const SerialPort = require('serialport');
const parsers = SerialPort.parsers;


const port = new SerialPort('COM3', () => {
console.log('Port Opened');
});
const parser = new parsers.Readline({
delimiter: '\n'

});

var server = http.createServer(function(request, response){
var path = url.parse(request.url).pathname;

switch(path){
    case '/':
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write('hello world');
        response.end();
        break;
    case '/socket.html':
        fs.readFile(__dirname + path, function(error, data){
            if (error){
                response.writeHead(404);
                response.write("opps this doesn't exist - 404");
                response.end();
            }
            else{
                response.writeHead(200, {"Content-Type": "text/html"});
                response.write(data, "utf8");
                response.end();
            }
        });
        break;
    default:
        response.writeHead(404);
        response.write("opps this doesn't exist - 404");
        response.end();
        break;
}
});

server.listen(5000);
port.pipe(parser);

io.listen(server);

var listener = io.listen(server);

listener.sockets.on('connection', function(socket){
console.log('1 connection');

function ReadSerialData(data){
    console.log(data);
    console.log('Connection');
    //do stuff here
    //socket.emit('message', 'connection successuf');

    socket.emit('message', {'message': data})
}

parser.on('data', ReadSerialData);
});

这是我的socket.html代码:

<html>
  <head>
    <script src="/socket.io/socket.io.js"></script>
  </head>
  <body>
    <script>
      var socket = io.connect();
      socket.on('message', function(data){
      console.log(data.message);
      });
    </script>
    <div>Testing page! </div>
  </body>
</html>

我尽了一切,但我无法摆脱

1 个答案:

答案 0 :(得分:0)

删除双io.listen(server);解决了该错误。

通过访问error 404给出的/socket.io/socket.io.js没问题,一旦服务器正确运行,它将消失。

数据问题出在解析器中:分隔符为\n,但在Arduino代码中将\r打印为新行。