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

Node.js ws库接收消息后如何将Buffer转为可访问对象?

解决Node.js ws包中WebSocket消息Buffer转JSON对象的问题

标准正确转换代码

直接指定编码转字符串后解析,同时用try-catch捕获解析异常方便排查:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
  ws.on('message', (data) => {
    // 显式指定utf8编码转换字符串(避免默认编码导致的乱码)
    const jsonStr = data.toString('utf8');
    try {
      const messageObj = JSON.parse(jsonStr);
      // 现在可以直接访问属性
      console.log(messageObj.keepAlive); // 输出:'1'
    } catch (parseErr) {
      console.error('JSON解析失败:', parseErr.message);
      // 打印转义后的字符串,排查是否有隐藏字符
      console.error('原始字符串内容:', JSON.stringify(jsonStr));
    }
  });
});

可能的失败原因及修复方案

如果按上面的代码还是解析失败,大概率是字符串包含隐藏字符(BOM头、多余空格/换行),可以针对性处理:

  1. 移除UTF-8 BOM头
    某些客户端发送的JSON可能带BOM头(\uFEFF),导致解析失败,用正则去除:
    const jsonStr = data.toString('utf8').replace(/^\uFEFF/, '');
    const messageObj = JSON.parse(jsonStr);
    
  2. 去除首尾空白字符
    如果字符串前后有空格、换行等空白字符,用trim()处理:
    const jsonStr = data.toString('utf8').trim();
    const messageObj = JSON.parse(jsonStr);
    

排查技巧

如果解析报错,先打印转义后的字符串(JSON.stringify(jsonStr)),能直观看到所有字符(包括隐藏的)。比如如果输出是"\n{\"keepAlive\":\"1\"}\r",就说明有换行和回车符,用trim()就能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:05:17