如何将 Node 和 MongoDB 与网络应用程序连接起来

How connect Node and MongoDB with web app

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

我不是后端程序员专家,那么就复杂性而言,最好的方法是什么?有一些直观的库? API ? Socket.io ?猫鼬?

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

方案二 您可以在后端和前端之间打开一个网络套接字或流,以便后端实时推送数据。

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

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

物联网->通过MQTT发送数据->服务器接收数据->服务器通过WebSocket发送数据->客户端接收数据。

我正在使用 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>

很简单,不是吗。希望对你有帮助。