初学者。
好的,我正在尝试完成一个简单的数据流:
MQTT-Data-source ---> MQTT经纪人---> NodeJS-MQTT-Client ---> AJAX-on-web-browser(每3秒轮询一次)
console.log(mqttMessage);
上,如何清除以前的消息?因为在控制台上我可以看到所有以前的数据以及新数据的累加。我在Express上使用mqtt.js作为我的nodejs mqtt支持。
//Server.js
var mqtt = require('mqtt');
...
...
var getData = function() {
mqttClient.subscribe(mqttTopic);
mqttClient.on('message', function(topic, message) {
mqttMessage = message.toString();
console.log(mqttMessage);
})
return mqttMessage;
}
app.get('/pollData', function(req, res) {
res.send(getData());
});
在一个简单的html页面上,我得到了:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
$(document).ready(
function() {
setInterval(function() {
$.get('/pollData', function(res) {
$('#data').text(res);
});
}, 3000);
}
);
</script>
答案 0 :(得分:2)
这是一个非常糟糕的模式,您应该只使用Paho MQTT Javascript客户端并直接从网页订阅该主题。
但如果你真的想这样做,那么以下是正确的方法。
//Server.js
var mqtt = require('mqtt');
...
...
var mqttMessage;
mqttClient.subscribe(mqttTopic);
mqttClient.on('message', function(topic, message) {
mqttMessage = message.toString();
console.log(mqttMessage);
})
app.get('/pollData', function(req, res) {
if (mqttMessage) {
res.send(mqttMessage);
} else {
res.status(404).send();
}
});
这是因为您没有从MQTT主题中读取值,您必须等到该主题发布某些事情,然后代理才会将其转发给所有订阅者。所以在上面的代码中你设置了连接,订阅,然后在发布消息时它存储在mqttMessage
变量中,如果它没有未定义,它可以由REST端点返回。