通过 socket.io 传输文本文件的内容会产生 ArrayBuffer 对象
Transferring a text file's contents over socket.io results in a ArrayBuffer object
我是 socket.io
的新手,也很少接触 node.js
所以我从简单的聊天应用程序开始,然后逐步发展
当消息来自另一个客户端时,我可以获取从服务器发送到客户端的文本消息,就像聊天演示应用程序所做的那样
但是当尝试让服务器读取本地文件并使用 io.emit
发送此内容时,客户端收到的似乎是 ArrayBuffer
的实例,这在任何情况下都会造成混淆JSON 解析器
更具体地说,服务器端
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
...
当我通过文件以外的其他来源获取输入时逻辑有效,这一切都强烈表明我从 readFile
中得到的 data
不是纯字符串,而是一些某种以某种方式到达客户端的实例;就像我以二进制或其他方式打开我的输入文件一样。
任何人都可以建议一种方法让 JSON.parse() 对这种情况感到满意吗?服务器端或客户端,任何一种方式都适合我。
非常感谢
您可以使用 Uint8Array
视图访问 ArrayBuffer
然后将其转换为字符串:
socket.on('r2lab status', function(data){
var buffer = new Uint8Array(data)
var fileString= String.fromCharCode.apply(null, buffer)
var obj = JSON.parse(fileString)
});
我是 socket.io
的新手,也很少接触 node.js
所以我从简单的聊天应用程序开始,然后逐步发展
当消息来自另一个客户端时,我可以获取从服务器发送到客户端的文本消息,就像聊天演示应用程序所做的那样
但是当尝试让服务器读取本地文件并使用 io.emit
发送此内容时,客户端收到的似乎是 ArrayBuffer
的实例,这在任何情况下都会造成混淆JSON 解析器
更具体地说,服务器端
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
...
当我通过文件以外的其他来源获取输入时逻辑有效,这一切都强烈表明我从 readFile
中得到的 data
不是纯字符串,而是一些某种以某种方式到达客户端的实例;就像我以二进制或其他方式打开我的输入文件一样。
任何人都可以建议一种方法让 JSON.parse() 对这种情况感到满意吗?服务器端或客户端,任何一种方式都适合我。
非常感谢
您可以使用 Uint8Array
视图访问 ArrayBuffer
然后将其转换为字符串:
socket.on('r2lab status', function(data){
var buffer = new Uint8Array(data)
var fileString= String.fromCharCode.apply(null, buffer)
var obj = JSON.parse(fileString)
});