我有一个节点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>
假定您的传感器调用了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');
});