为什么服务器上的socket.io无法连续运行?

问题描述 投票:0回答:1

我有一个节点api(POST),传感器在其中继续将数据推送到MongoDB。现在,在将数据插入数据库之前,我需要将其传递给HTML页面。为了获得连续的数据流,我使用了SOCKET.IO模块。数据应使用SOCKET.IO-CLIENT显示在html页面上。但是我要解决的问题是,对于API路由的初始执行,它正在获取数据并显示在页面上。但是第二次执行api时,数据将保存到db中,但不会显示在html页上。请看一下我的代码。

POST API

AddDeviceLogs:async function(templateId, payload){
    let err, deviceData;
    payload.template=templateId;
    const myCollection=templateId;
    var io = require('socket.io')(server);
    io.on('connection',function(socket){
        socket.emit('data', payload); 
    });

    app.get('/',function(req,res) {
        res.sendFile('C:/Users/user/Desktop/data.html');
    });

    [err, deviceData]=await to(mongoose.connection.db.collection(myCollection).insert(payload));
    if(err) TE(err.message, true);
    return (deviceData)? deviceData.result:false;
},

HTML

<html>
    <head>
        <script src="/socket.io/socket.io.js"></script>
        <!--<script src='https://cdn.socket.io/socket.io-1.2.0.js'></script>-->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
    </head>
    <body>
        <script>
            var socket = io.connect("http://localhost:3000/",{"forceNew": true});
            socket.on('data', function(data){
                $('#deviceid').text(data.deviceId);
            });
            socket.on('data', function(data){
                $('#heat').text(data.heat);
            });
            socket.on('data', function(data){
                $('#humidity').text(data.humidity);
            });
        </script>
        <h4>Welcome to socket.io testing program!</h4>
        <div id="deviceid"></div>
        <div id="heat"></div>
        <div id="humidity"></div>
    </body>
</html>

sample output of html page. The details are need to changed frequently. But I couldn't able to solve the issue here.

node.js express socket.io
1个回答
0
投票

假定您的传感器调用了AddDeviceLogs。

var io = require('socket.io')(server);
var datas;
io.on('connection',function(socket){
    if (datas)
        socket.emit('data', payload); 
});

async function AddDeviceLogs(templateId, payload){
    let err, deviceData;
    payload.template=templateId;
    const myCollection=templateId;

    io.emit('data', payload);         

    [err, deviceData]=await to(mongoose.connection.db.collection(myCollection).insert(payload));
    if(err) TE(err.message, true);
    return (deviceData)? deviceData.result:false;
}
app.get('/',function(req,res) {
    res.sendFile('C:/Users/user/Desktop/data.html');
});
© www.soinside.com 2019 - 2024. All rights reserved.