【问题标题】:Cannot GET / using node.js + socket.io to connect client to server无法获取 / 使用 node.js + socket.io 将客户端连接到服务器
【发布时间】:2020-04-24 11:53:16
【问题描述】:

所以我正在尝试使用该软件的 node.js 和 socket.io 使用蓝牙创建一个室内位置跟踪器。我正在使用树莓派 3 来获取 RSSI 读数,并且只想要来自一个特定硬件的 RSSI 值。我已经能够在我的客户端和服务器之间创建连接,并设法获取我想要 RSSI 值的特定硬件的 uuid。但是,虽然连接成功,但我没有从 pi 获得任何 RSSI 值。每次我执行下面的代码时,每当我访问我的本地主机网页时,我得到的都是“无法获取 /”错误。

以下代码是我从 pi 执行的:

var noble = require('noble');

//replace localhost with your server's IP;
var socket = require('socket.io-client')('http://localhost/scanner');

//replace with your hardware address
var addressToTrack = '7c669d9b2dda'; 

socket.on('connect', function(){  
  console.log('connected to server');
});

noble.on('discover', function(peripheral){
  if(peripheral.uuid == addressToTrack){
    socket.emit('deviceData', {mac: peripheral.uuid, rssi:peripheral.rssi});    
  }
});

noble.startScanning([], true) 

下一个代码是我用来设置服务器的代码,以及它应该如何接收从 pi 发送的信息:

var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

var scanner = io.of('/scanner'); 

scanner.on('connection', function(socket) {

    console.log('Scanner Connected');

    socket.on('message', function(msg) {
        //received message from scanner
        //do some processing here
    });

    socket.on('disconnect', function() {
        console.log('Scanner Disconnected');
    });
});

http.listen(3000, function() {
    console.log('listening on *:3000');
});

如果您想知道我从哪里引用代码,以下代码取自 https://blog.truthlabs.com/beacon-tracking-with-node-js-and-raspberry-pi-794afa880318

我对这一切都很陌生,所以我试图了解问题出在哪里。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您没有为 / 设置任何快速路由,这就是您得到:Cannot GET /

    添加:

    // this should be AFTER socket.io server setup
    app.use((req, res) => {
       res.send('Hello world');
    });
    
    http.listen(3000, function() {
        console.log('listening on *:3000');
    });
    

    现在除了socket-io 特定端点之外的每个端点都会响应:hello world


    除此之外,关于您的客户端代码。您正在尝试连接到:http://localhost 而不是 http://localhost:3000,您的 socket.io 服务器正在运行的端口。

    【讨论】:

    • 感谢您的帮助。你所说的有效,我设法让“Hello World”显示在我的本地主机网页上。但是我不明白为什么如果连接已经建立,我的 pi 中的 rssi 值没有显示在服务器上。
    • 检查更新的答案,您在客户端上使用了错误的 URL。
    • 所以我发现我必须输入服务器的IP地址和端口号,它表明我的pi和服务器之间已经建立了连接。但这就是它没有显示 rssi 值。
    • 这是一个完全不同的问题。这个答案解决了原来的问题。您可以随时将其标记为已接受的答案,然后创建一个新答案,我很乐意帮助您解决代码中的其他问题。
    • 很抱歉,这是新的。谢谢你的建议。
    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多