最近使用了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。這樣就正確的接收二進制數據了。node