javascript - 将缓冲区转换为 JS 对象的问题

标签 javascript json node.js mqtt

我正在使用 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/

相关文章:

c# - JSON 反序列化为 C# 类型

javascript - 如何在 POSTMAN 上获得与浏览器相同的响应行为?

javascript - 使用适用于 IE 的 Ajax 进行文件发布

php - 上传大文件时 POST 数据消失

javascript - Casper JS - 单击链接,等待 ajax 响应

javascript - 如何修复带有复选框的 vue 更新?

jquery - AJAX 将不带表单的 ValidateAntiForgeryToken 发布到 MVC 操作方法

javascript - 我如何在meteorjs中返回包含函数的对象?

javascript - Jest + super 测试|开 Jest 检测打开的句柄

javascript - 客户端javascript与服务器node.js通信的简单方法