Node 使用mosca mqtt +mongodb 示例

本文只是吐槽这些软件的说明和版本示例更新不及时导致自己纠错麻烦.

按照github上mosca+mongodb的示例(https://github.com/mcollina/mosca/wiki/Mosca-basic-usage)来写,竟然run不起来,报找不到'insert'方法, 然后我就先加载mongodb的node模块看看是否mongodb安装得不对.

然后按照网上的方法nodejs 连数据库mongodb的例子:

https://blog.csdn.net/wangyunbo158/article/details/78751398

可是自己运行却报了db.collection 也没定义. 找了一圈,原来是人家API已经升到3.0以上版本的用法不一样了. callback返回的是client而不是db...

https://stackoverflow.com/questions/47662220/db-collection-is-not-a-function-when-using-mongoclient-v3-0

好了确认不是数据库的问题,那是为啥报错呢... 还好最后还是搜出来了,在mosca的issue里,

https://github.com/mcollina/mosca/issues/443

竟然是官方示例调用的时机不对,server.publish消息要在setup后面...为啥这么简单的逻辑在官方示例里还不改,真是有够坑爹的..

所以最后正常运行的示例是长这样的.

var mosca =require ('mosca');

var ascoltatore = {

//using ascoltatore

type: 'mongo',    

url: 'mongodb://127.0.0.1:27017/mqtt',

pubsubCollection: 'ascoltatori',

mongo: {}

};

var moscaSettings = {

port: 1883,

backend: ascoltatore,

persistence: {

factory: mosca.persistence.Mongo,

url: 'mongodb://127.0.0.1:27017/mqtt'

}

};

var server = new mosca.Server(moscaSettings);

server.on('ready', setup);

server.on('clientConnected', function(client) {

console.log('client connected', client.id);   

});

// Sending data from mosca to clients

var message = {

topic: '/hello/world',

payload: 'abcde', // or a Buffer

qos: 0, // 0, 1, or 2   qos2不支持

retain: false // or true

};

// fired when a message is received

server.on('published', function(packet, client) {

console.log('Published', packet.payload);

});

// fired when the mqtt server is ready

function setup() {

     console.log('Mosca server is up and running');

     server.publish(message, function() {

                console.log('done!');

      });

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值