赞
踩
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
这个例子是本人在使用websocket时产生的问题,使用JavaScript,node.js
toString 方法能把Buffer其转为我们能认识的字符
function handleMessage (msg) {
console.log(msg)// 这里是buffer数据例如<Buffer 7b 22 69 64 22 3a 31 36 37 30 32 30 39 35 37 30 33 34 33 2c 22 75 73 65 72 22 3a 22 4a 61 79 62 69 72 64 22 2c 22 64 61 74 65 54 69 6d 65 22 3a 31 36 ... 30 more bytes>
msg = msg.toString()// 在此之后就会变成字符串类型
console.log(msg)// {"id":1670209570343,"user":"Jaybird","dateTime":1670209570343,"msg":"去去去"}
server.clients.forEach((c) => {// 等转换为字符串类型之后再传回前端
c.send(msg);
})
}
JSON.parse(e.data);// 前端只需要把后端传过来在data中的JSON字符串转变为js对象就可以了
function handleMessage (msg) {
server.clients.forEach((c) => {
c.send(msg);// 后端直接返回就好
})
}
async handleWsMessage (e) { // console.log(e.data);// Blob {size: 74, type: ''},通过下面的函数转换为对象 var msg; await blobToObj(e.data); console.log(msg) function blobToObj(data) { return new Promise((resolve, reject) => { let reader = new FileReader(); reader.readAsText(data, 'utf-8'); reader.onload = function() { try { msg = JSON.parse(reader.result); resolve(msg) } catch (error) { resolve({ code: 200, message: '获取文件信息失败' }) } } }); } } }
e.data.text(res => console.log(res));
这个res的值就是一个对象,可以:
var msg;
e.data.text(res => msg = res);
console.log(msg)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。