簡體   English   中英

為什么我的緩沖區會自動轉換為嵌套數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM