我无法通过 socket.io 获取实时数据到客户端并将其显示在页面上



我有一个应用程序,该应用程序应实时更新Websocket API的一些数据。当我委托在服务器端上log时显示此数据。我尝试将其存储在变量中,然后通过socket.io的发射功能。但是,当我尝试将数据显示在前端时。

时,这给出了无效。

我做错了什么,它不会在页面上显示?

服务器端代码:

 app.get("/", function(req, res){
    res.render("home");
});
app.get("/fat-finger", function(req, res){
    binance.prices((error, ticker) => {
        var prijzen = ticker;
        res.render("fat-finger", {laatstePrijzen: prijzen});
    });
});
app.set('port', process.env.PORT || 3000);
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(app.get('port'));
console.log("Server is up and running!")
io.on('connection', function(client) {
    console.log('Client connected...');
    var coinData;
    binance.websockets.prevDay('BTCUSDT', (error, response) => {
        coinData = response;
        console.log(coinData);
    });
    io.emit('coins', coinData);  //this code sending data from server to client
});

前端代码(客户端):

<% include partials/header %>
<header class="ui main container">
        <h1>Fat Finger Scanner</h1>
    </header>
    <main class="ui text container">
        <section class="ui container segment">
            <h4>You can find Fat Fingers quickly with this tool!</h4>
            <div id="coindatadiv">
                <script>
                    var div = document.getElementById("coindatadiv");
                    socket.on("connect", function(allCoinData){
                        div.innerHTML += "<p>"+allCoinData+"</p>";
                    });
                </script>
            </div
        </section>
    </main>
</div>
<% include partials/footer %>

套接字连接正确,因此在设置的任何一侧都不应成为问题。我唯一遇到的事情是通过数据从服务器传递到客户端,并能够在页面上显示数据更新本身。

看起来您在客户端上收到错误的数据。在服务器端,您正在调用io.emit('coins', coinData);将硬币数据发送给客户端。您正在命名事件"硬币",因此在客户端,您必须收听"硬币"事件,而不是"连接"事件。

var div = document.getElementById("coindatadiv");
socket.on("coins", function(allCoinData){
    div.innerHTML += "<p>"+allCoinData+"</p>";
});

希望这是有道理的,让我知道是否有其他事情出现!:)

我现在意识到您正在使用API,并希望使所有客户端保持最新信息。您可能想做的只是在API更新时散发到所有插座:

更改

io.on('connection', function(client) {
    console.log('Client connected...');
    var coinData;
    binance.websockets.prevDay('BTCUSDT', (error, response) => {
        coinData = response;
        console.log(coinData);
    });
    io.emit('coins', coinData);  //this code sending data from server to client
});

to

var coinData = 'not yet defined';
binance.websockets.prevDay('BTCUSDT', (error, response) => {
    coinData = response;
    io.emit('coins', coinData);
    console.log(coinData);
});
io.on('connection', function(client) {
    client.emit('coins', coinData); 
});

每次您从API收到消息时,这都会发出所有插座。

最新更新