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

我是一个socket.io的新手,对node.js暴露也很less

所以我从简单的聊天应用程序开始,并build立了自己的方式

当消息来自另一个客户端时,我可以将短信从服务器发送到客户端,就像聊天演示应用一样

但是,当试图让服务器读取一个本地文件并通过使用io.emit发送这个内容时,客户端收到的东西似乎是ArrayBuffer一个实例,它在任何情况下都会混淆JSONparsing器

更具体地说,服务器端呢

 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 ... 

由于逻辑工作,当我得到我的input另一个来源而不是文件,这一切都强烈build议我从readFile获取的data不是一个纯string,但某种实例,以某种方式使其到客户端; 就像我打开我的input文件在二进制文件或东西。

任何人都可以提出一种方法来获得JSON.parse()以满足这种情况? 服务器端或客户端,无论哪种方式对我来说都可以。

非常感谢

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

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