关于后端buffer数据和传给前端blob数据的处理

Node.js Buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。

但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。

关于后端buffer数据和传给前端blob数据的处理

这个例子是本人在使用websocket时产生的问题,使用JavaScript,node.js

1 在后端转换为JSON字符串

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对象就可以了

2 在前端将blob转换为对象

  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: '获取文件信息失败'
              })
            }
          }
        });
      }
    }
  }

3 调用text()方法

e.data.text(res => console.log(res));

这个res的值就是一个对象,可以:

var msg;
e.data.text(res => msg = res);
console.log(msg)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值