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
相关产品推荐
相关产品推荐

