Javascript 如何订阅客户端并将数据保存到Node.js、Mosca和MQTT中的MongoDB

Javascript 如何订阅客户端并将数据保存到Node.js、Mosca和MQTT中的MongoDB,javascript,node.js,mongodb,mqtt,mosca,Javascript,Node.js,Mongodb,Mqtt,Mosca,我有一个遥控器,它只不过是一个传感器。它会不断地给我一些数字。实际上,我在我的node.js服务器中收到了这些数字,我不想发布这些数据。我想订阅我的客户,并想在客户订阅后打印我的主题和消息。这是我的节点.js服务器和c中的mqtt。在/a.out之后,使用节点app.js和gcc main.c运行这两个文件 如何解决此问题? 文件如下所示: app.js 'use strict'; //dependencies var express = require('express')

我有一个遥控器,它只不过是一个传感器。它会不断地给我一些数字。实际上,我在我的node.js服务器中收到了这些数字,我不想发布这些数据。我想订阅我的客户,并想在客户订阅后打印我的主题消息。这是我的节点.js服务器和c中的mqtt。在/a.out之后,使用节点app.jsgcc main.c运行这两个文件 如何解决此问题?
文件如下所示:

app.js

'use strict';

//dependencies
var express          = require('express'),
    passport         = require('passport'),
    strategy         = require('passport-local').Strategy,
    mongoose         = require('mongoose'),
    mongodb          = require('mongodb'),
    bodyParser       = require('body-parser'),
    path             = require('path'),
    acl              = require('acl'),
    mosca            = require('mosca');   

exports.init = function(pp) {
    passport = pp;
    app = pp;
    return exports;
};

exports.root = function(req, res) {
    // Running
    res.send("Running");
};

//create express app
var app         = express();
    app.appname ="watersensor_DB";

//config mongoose
  mongoose.Promise = global.Promise;
  app.db = mongoose.createConnection('localhost/'+app.appname);
  app.db.on('error', console.error.bind(console, 'mongoose connection error: '));
  app.db.once('open', function () {
    // Store All Data
  });

//config mongodb
  mongodb.connect("mongodb://localhost/"+app.appname, function(error, mdb) {
  app.acl=new acl(new acl.mongodbBackend(mdb, app.appname));
  });

//config data models
  require('./models')(app, mongoose);

//Serve Frontend
  app.use(express.static(path.join(__dirname, '/public/')));

//config Routes
  var router = express.Router();
  require('./routes')(app, router, passport);

//config express
  app.set('secret','thisshouldnotbeinplaintext');
  app.use(bodyParser.urlencoded({ extended: false }));
  app.use(bodyParser.json());
  app.use(passport.initialize());
  app.use(router);


//config mosca
var ascoltatore = {
  //using ascoltatore 
  type: 'mongo',
  url: 'mongodb://localhost:27017/mqtt',
  pubsubCollection: 'ascoltatori',
  mongo: {}
};

var settings = {
  port: 1883,
  backend: ascoltatore,
  persistence: {
    factory: mosca.persistence.Mongo,
    url: 'mongodb://localhost:27017/mqtt'
  }
};

var server = new mosca.Server(settings);

server.on('clientConnected', function(client) {
    console.log('client connected', client.id);
});

// fired when a message is received 
server.on('published', function(packet, client) {
  console.log('Published', packet.payload); 
});


server.on('ready', setup);

// fired when the mqtt server is ready 
function setup() {
  console.log('Mosca server is up and running');
}

//Port Listening
  app.listen(7000, function(){
    //Running
    console.log("Node.js Server Is Running On localhost:7000");
  });
main.c

#include <stdio.h>

main()
{
    char buf[1024];
    int i;  
    //mosquitto_sub -t 'test/topic' -v
    //mosqui<to_pub -t 'test/topic' -m 'hello'
    for(i=0; ;i++) {
        //sprintf(buf, "mosquitto_pub -h 192.168.43.82 -p 1883 -t 'test' -m '%d'",i);
        sprintf(buf, "mosquitto_pub -t 'test' -m '%d'",i);
        printf("%s\n",buf);
        system(buf);
        sleep(1);
    }
}
#包括
main()
{
char-buf[1024];
int i;
//mosquitto_sub-t“测试/主题”-v

//mosqui您的意思是node.js服务器从您的远程设备获取发布的数据?之后,服务器将数据存储在MongoDB

因此,服务器不需要订阅客户端。它可以从下面的代码中获取数据

server.on('published', function(packet, client) {
    console.log('Published : ', packet.topic + " --- " + packet.payload);

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/mydb";

    MongoClient.connect(url, function(err, db) {
      if (err) throw err;

      var stringBuf = packet.payload.toString('utf-8');
      var myobj3 = JSON.parse(stringBuf);

      db.collection("customers").insertOne(myobj3, function(err, res) {
        if (err) throw err;
        console.log("1 record inserted");
        db.close();
      });
    });
});

确实不清楚您在这里问的是什么。请尝试重新回答问题,以便更清楚地描述您试图实现的目标。这是非常低效的,您正在为每条邮件打开和关闭与数据库的连接,而且无法检查邮件主题是否正确。