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