You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js基于ws库的WebSocket通信仅返回Blob而非字符串问题求助

问题根因

ws库服务端触发message事件时,回调拿到的message默认是Buffer二进制类型,直接调用send方法返回给客户端时,浏览器会把二进制响应按默认配置封装为Blob对象,直接拼接字符串打印就会输出[object Blob]。之前代码可正常运行大概率是旧版ws库的message事件默认返回字符串,版本升级后默认行为变更导致出现该问题。


可行解决方案

方案1:服务端侧修改(最简便,无需调整客户端代码)

将收到的Buffer转为字符串后再返回即可:

import WebSocket, {WebSocketServer} from 'ws';
const server = new WebSocketServer({port:'8080'});

server.on('connection', socket => {
    socket.on('message', message => {
        socket.send(message.toString()); // 仅新增toString()转换逻辑
    });
});

方案2:客户端侧修改(无需调整服务端代码)

有两种常用写法可选:

  • 写法A:异步读取Blob为文本
socket.onmessage = async ({data}) => {
    const msg = data instanceof Blob ? await data.text() : data;
    console.log('服务端返回的消息! ' + msg);
}
  • 写法B:修改WebSocket二进制接收格式,手动解码
const socket = new WebSocket('ws://localhost:8080');
socket.binaryType = 'arraybuffer'; // 新增配置指定二进制接收格式

socket.onmessage = ({data}) => {
    const msg = new TextDecoder().decode(data);
    console.log('服务端返回的消息! ' + msg);
}

内容的提问来源于stack exchange,提问作者Prinzherbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:54:04