2016-01-10 28 views
0

我試圖從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在角度來看它是否會轉換它,它沒有。 我將模式中的存儲數據類型更改爲字符串,它沒有改變任何東西,我沒有其他更多的東西可以考慮更改爲排除故障。

回答

0

它不是一個數組的數組,它是一個具有大數據數組的緩衝區對象(console.log將其拆分以簡化日誌記錄)。一個解決辦法是排除的照片,然後有不同的途徑來獲取特定吃飯的圖片(因爲express can deal with buffers automatically):

// 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)

0

所以我把它通過改變架構中的數據類型一道

picture: {data: Buffer, contentType: String}, 

然後在客戶端我轉換的基礎

<img ng-src="data:image/JPEG;base64,{{meal.picture}}"/> 

,我設法守在一切相同的REST請求!

相關問題