2015-01-01 97 views
2

我發送的$http.post請求從Angular.js到的Node.js爲了得到一個ArrayBuffer如下:

$http.post('/api/scholarships/load/uploaded-files', Global.user, {responseType:'arraybuffer'}).success(function(ab){ 
    console.log(ab); // Return ArrayBuffer {} 
}); 

然後,在Node.js的,我取回上傳的文件數據和變換Buffer對象ArrayBuffer對象:

exports.loadUploadedFiles = function(req, res) { 
    db.UserFile.findAll().success(function(files) { 
     var buffer = files[0].dataValues.data; // Get buffer 
     var arrayBuffer = new ArrayBuffer(buffer.length); // Start transforming Buffer to ArrayBuffer 
     var views = new Uint8Array(arrayBuffer); 
     for(var i = 0; i < buffer.length; ++i) { 
      views[i] = buffer[i]; 
     } 
     res.type('arraybuffer'); 
     res.send(arrayBuffer); // Send the ArrayBuffer object back to Angular.js 
    }).error(function(err) { 
     console.log(err); 
     res.sendStatus(500); 
    }); 
}; 

當我試圖打印從上面$http.post的反應,我總是得到ArrayBuffer{}。我做錯了什麼?任何幫助,將不勝感激。

回答

1

沒有必要在服務器端創建一個ArrayBuffer。實際上,只要在node.js中返回緩衝區就可以。 ArrayBuffer是客戶端/瀏覽器端的一個概念,用於將來自服務器的數據解釋爲ArrayBuffer。您得到「ArrayBuffer {}」的原因可能是因爲node.js是toString()在res.send()上的ArrayBuffer,因爲它不理解該對象。所以試試這個

exports.loadUploadedFiles = function(req, res) { 
    db.UserFile.findAll().success(function(files) { 
     var buffer = files[0].dataValues.data; // Get buffer 
     res.send(buffer); 
    }).error(function(err) { 
     console.log(err); 
     res.sendStatus(500); 
    }); 
}; 
+0

我正要發佈:)參考:[express.js文檔](http://expressjs.com/api.html#res.send); res.send()允許發送字符串或緩衝區 – gengkev

+0

感謝您的回覆。當我將它作爲Buffer傳輸時,我得到了一個JavaScript對象。是否有可能將此對象轉換爲Angular.js中的ArrayBuffer? – lvarayut

+0

你得到了什麼類型的Javascript對象?此外,緩衝區包含什麼類型的數據(即它是JSON)? – ekcr1