如何将 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>
很简单,不是吗。希望对你有帮助。
我正在使用 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>
很简单,不是吗。希望对你有帮助。