如何将Node和MongoDB与Web应用程序

时间:2017-02-02 14:19:32

标签: node.js mongodb iot

我使用Node.js从MQTT代理(with this)获取数据并存储在MongoDB数据库中。现在我想在Web应用程序(可能)中实时显示这些数据。 数据来自不同的物联网节点,因此每次节点发送数据时,我都会认为HTMl中的按钮变为绿色或闪烁。

我不是专家后端程序员,所以在复杂性方面,最好的方法是什么?有一些直观的库? API? Socket.io? Moongose?

2 个答案:

答案 0 :(得分:1)

WebSocket类似于MQTT,但没有关于客户端或服务器如何相互通信的强调协议。

由于您已经在NodeJS中实现了MQTT,我建议使用以下模式来建立通信。

物联网 - >通过MQTT发送DATA - >服务器接收DATA - >服务器通过WebSocket发送DATA - >客户收到DATA。

我正在使用socket.io,这是一个流行的WebSocket库,用于演示。

第1步:安装socket.io

  

npm install socket.io

第2步:服务器端实现

var app = require('express')();
var http = require('http').Server(app);
var mqtt = require('mqtt'); // This is for demonstration only, use your existing mqtt library instead.
var client = mqtt.connect('mqtt://test.mosquitto.org');

var io = require('socket.io')(http);

io.on('connection', function(socket) { // Whenever a new client is connected, this event is triggered
    console.log("[Live] A new client connected.", socket.id);
    socket.on('disconnect', function(socket) {
        console.log("[Live]", socket.id, "got disconnected.");
    });
});

client.on('message', function (topic, message) {
   io.emit('live', message.toString());  // io.emit(channel, message);
   // Broadcasts message to all client instance's that are subscribed to 'live' channel.
});

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

第3步:客户端实施

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.2/socket.io.js"></script>
<script>
  var socket = io('http://localhost:3000');
  socket.on('live', function (data) { // This event is triggered when server publishes data to 'live' channel
    console.log(data);
  });
</script>

简单,不是吗。希望它有所帮助。

答案 1 :(得分:0)

解决方案1 您可以让您的前端订阅您的MQTT代理。潜在的问题是数据可能不会进入您的数据库,但它会显示在网页上。

解决方案2 您可以在后端和前端之间打开Web套接字或流,以便后端实时推送数据。