我将mosca库用于MQTT代理,this用于MQTT客户端。
客户端代码如下所示:
client.on('connect', function () {
client.subscribe('presence')
var json = {
someVar: 888,
someNum: 234
}
client.publish('presence', JSON.stringify(json));
});
client.on('message', function (topic, message) {
var json = JSON.parse(message.toString())
console.log(json.someVar);
client.end();
});
处理每个已发布消息的代理在此处:
server.on('published', function(packet, client) {
console.log('Package received:')
console.log('Published', packet);
var stringBuf = packet.payload.toString('utf-8')
console.log('buffer to string:', stringBuf)
var stringify = JSON.stringify(packet.payload)
console.log('stringify:',stringify);
var json = JSON.parse(stringily);
}
buffer to string:
的输出如下所示:
{"someVar":888,"someNum":234}
哪个应该是有效的json。但每当我尝试访问json-object时(使用JSON.parse()
之后),它只返回变量的undefined。
我也试过
var buf = json.data;
console.log('buffer data:', but);
但这只是返回一个缓冲数组,似乎无法转换。
在客户端函数中,我可以轻松地将字符串解析为JS对象,因此我对发生的事情感到有点迷失。
有什么建议吗?感谢。
答案 0 :(得分:3)
就像 stdob - 所说的那样,你试图解析所有传入的消息,例如你输出的输出:
$scope.nome > $scope.name
您可以检查主题以处理所需的Package received:
Published mqttjs_05cac308
Package received:
Published {"clientId":"mqttjs_05cac308","topic":"presence"}
Package received:
Published <Buffer 7b 22 73 6f 6d 65 56 61 72 22 3a 38 38 38 2c 22 73 6f 6d 65 4e 75 6d 22 3a 32 33 34 7d>
Package received:
Published {"clientId":"mqttjs_05cac308","topic":"presence"}
Package received:
Published mqttjs_05cac308
消息:
presence
答案 1 :(得分:1)
您收到错误,因为尝试解析所有传入的消息,包括不包含纯JSON数据的服务消息。试试这个:
server.on('published', function(packet, client) {
console.log('Package received:')
console.log('Published', packet);
var stringBuf = packet.payload.toString('utf-8')
try {
var json = JSON.parse(stringBuf);
console.log( json );
} catch (e) {
console.log( stringBuf );
}
}