我正在使用 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 对象时(在使用 JSON.parse()
之后),它只会为变量返回 undefined。
我也试过
var buf = json.data;
console.log('buffer data:', but);
但这只是返回一个缓冲区数组,它似乎也无法转换。
在客户端函数中,我可以轻松地将字符串解析为 JS 对象,所以我对发生的事情有点迷茫。
有什么建议吗?谢谢。
最佳答案
如 stdob-- 所说,您正在尝试解析所有传入消息,您的示例的输出示例:
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
消息:
server.on('published', function (packet, client) {
if (packet.topic == 'presence') {
var stringBuf = packet.payload.toString('utf-8');
var obj = JSON.parse(stringBuf);
console.log(obj);
}
});
/* output: { someVar: 888, someNum: 234 } */
关于javascript - 将缓冲区转换为 JS 对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35287579/