最近使用了protobuf进行数据交互,发送在node.js接收前端的二进制数据出现了数据错误等问题。后来发现思路上面的问题,在req.on('data',()=>{})事件中的处理不适当才引发数据错乱。借此发

我先直接贴正确接收二进制数据代码

const server = http.createServer((req, res) => {
        if(req.method==='OPTIONS'){
            res.setHeader("Access-Control-Allow-Origin", "*");
            res.statusCode=200;
        }
        if(req.method==='POST'){
          // 存储数组空间
          let msg=[];
          // 接收到数据消息
          req.on('data',(chunk)=>{
            if(chunk){
              msg.push(chunk);
            }
          })
          // 接收完毕
          req.on('end',()=>{
            // 对buffer数组阵列列表进行buffer合并返回一个Buffer
            let buf=Buffer.concat(msg);
            conosole.log(buf)//提取Buffer正确
          })                  
}    
});
server.listen(3000,'127.0.0.1');

nodejs中接收buffer数据需要以数组阵列的方式存储然后通过buffer.concat对数组阵列合并创建新的arraybuffer。这样就正确的接收二进制数据了。

本文固定链接: http://www.js-code.com/node-js/node-js_30242.html