[英]Why is my buffer automatically converted to a nested array
嘗試從MongoDB數據庫中檢索緩沖區格式時,正在更改它,我不確定該過程的哪一步正在更改它。
我將貓鼬模式定義為緩沖區:
var mealSchema = mongoose.Schema({
picture: Buffer,
看起來像我在數據庫中期望的那樣,是普通緩沖區:
{ "_id" : ObjectId("5691d1f73131c0db2b056447"), "picture" : BinData(0,"/9j/4TcORXhpZgAASUkqAKw2AA....
這是我用來將緩沖區發送回客戶端的代碼:
findAllMeals({})
.then(function(meals) {
res.send(200, meals);
客戶端是這樣接收它的:
Object {type: "Buffer", data: Array[86690]}
[0 … 9999]
[10000 … 19999]
[20000 … 29999]
[30000 … 39999]
[40000 … 49999]
[50000 … 59999]
[60000 … 69999]
[70000 … 79999]
[80000 … 86689]
length: 86690
它變成了一個數組數組,被存儲為一個緩沖區,並被發送回嵌套數組。 我還嘗試將其轉換為有角度的base64,以查看是否可以轉換,但沒有。 我將架構中的存儲數據類型更改為字符串,它沒有進行任何更改,我想不出什么其他來進行故障排除了。
它不是一個數組數組,它是一個帶有大數據數組的Buffer對象(console.log將其拆分以簡化日志記錄)。 一種解決方案是排除圖片,然后采用另一種方式來獲取特定餐點的圖片(因為express可以自動處理緩沖區 ):
// first route, exclude pictures
app.get('/meals', function(req, res, next) {
findAllMeals({}, {
picture: 0
})
.then(function(meals) {
res.send(200, meals);
});
});
// second route to fetch the picture of a meal
app.get('/meal_picture/:mealId', function(req, res, next) {
findOneMeal({
_id: req.params.mealId
}).then(function(meal) {
res.status(200).send(meal.picture);
});
});
然后,在您的html中,您可以簡單地編寫:
<img src='/meal_picture/5691d1f73131c0db2b056447'></img>
旁注,不建議使用res.send(200, meals)
,請使用res.status(200).send(meals)
。
所以我通過將模式中的數據類型更改為
picture: {data: Buffer, contentType: String},
然后在客戶端我轉換了基礎
<img ng-src="data:image/JPEG;base64,{{meal.picture}}"/>
而且我設法將所有內容都保留在相同的REST請求中!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.