【发布时间】:2016-02-09 08:52:49
【问题描述】:
我将 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() 之后)它只会返回未定义的变量。
我也试过了
var buf = json.data;
console.log('buffer data:', but);
但这只是返回一个缓冲区数组,似乎也无法转换。
在客户端函数中,我可以轻松地将字符串解析为 JS 对象,所以我对正在发生的事情有点迷茫。
有什么建议吗?谢谢。
【问题讨论】:
-
你为什么要这么做
var stringify = JSON.stringify(packet.payload)?只要JSON.parse(stringBuf),你就会拥有你的对象。 -
当我这样做时,我得到
SyntaxError: Unexpected token m
标签: javascript json node.js mqtt