通过socket.io传输文本文件的内容会产生ArrayBuffer对象

时间:2015-08-31 14:51:09

标签: json node.js socket.io

我是iopadmap -inpad IBUF O:I -widthparam WIDTH -nameparam NAME [your selection rule] 的新手,并且很少接触socket.io

所以我从简单的聊天应用程序开始,然后逐步建立起来

当消息来自其他客户端时,我可以将短信从服务器发送到客户端,如聊天演示应用程序

但是当尝试让服务器读取本地文件并使用node.js发送此内容时,客户端接收的内容似乎是io.emit的实例,无论如何都会混淆JSON解析器

更具体地说,服务器端

ArrayBuffer

和客户端

fs.watch('status.json', 
  function(event, filename){
    fs.readFile('status.json',
      function(err, data){
        if (err) throw err;
      io.emit("r2lab status", data);
      });
  });

在运行时在控制台

中触发此操作
socket.on('r2lab status', function(json){
    console.log("received JSON nodes_info " + json);
    var nodes_info = JSON.parse(json);
    /* etc.. */

由于逻辑在我通过其他来源而非文件获取输入时起作用,这有力地表明我received JSON nodes_info [object ArrayBuffer] r2lab.html:1 Uncaught SyntaxError: Unexpected token o ... data离开readFile不是一个普通的字符串,而是某种类型的以某种方式使它到客户端的实例;就像我用二进制文件打开我的输入文件一样。

有人能建议让JSON.parse()对这种情况感到满意的方法吗?服务器端或客户端,无论哪种方式对我都没关系。

非常感谢

1 个答案:

答案 0 :(得分:1)

您可以使用Uint8Array视图访问ArrayBuffer,然后将其转换为字符串:

socket.on('r2lab status', function(data){
  var buffer = new Uint8Array(data)
  var fileString= String.fromCharCode.apply(null, data)
  var obj = JSON.parse(fileString)
});