Невозможно получить доступ к парам ключ-значение объектов - PullRequest
0 голосов
/ 30 октября 2018

Я отправляю изображения через FormData из моего VueJS FrontEnd на мой Express Server, чтобы хранить их в БД Mongo с gridfs-stream и mongoose. Объекты изображений поступают на сервер, но я не знаю, как получить доступ к его парам ключ-значение.

Когда я побежал

let part = req.files
for (const prop in part) {
   console.log('part.${prop} = ${part[prop]}')
}

Я получил этот вывод:

part.files[0] = [object Object]
part.files[1] = [object Object]

но когда я попытался получить доступ к part.files [0], я получил эту ошибку:

TypeError: Cannot read property '0' of undefined

Вот как устроен Объект:

{ 'files[0]':
 { data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f ... >,
 name: 'e0ZnCwP.jpg',
 encoding: '7bit',
 mimetype: 'image/jpeg',
 truncated: false,
 size: 259454 },
'files[1]':
 { data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff c0 00 11 08 06 40 04 c8 03 01 22 00 02 11 01 03 11 01 ff c4 00 1f 00 00 01 05 01 01 01 ... >,
 name: 'Me.jpeg',
 encoding: '7bit',
 mimetype: 'image/jpeg',
 truncated: false,
 size: 108021 } }

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

У вас есть тип буксировки JSON: # 1

var part = {
files : { 
    { 
        data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f ... >,
         name: 'e0ZnCwP.jpg',
         encoding: '7bit',
         mimetype: 'image/jpeg',
         truncated: false,
         size: 259454 
    }, { 
        data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff c0 00 11 08 06 40 04 c8 03 01 22 00 02 11 01 03 11 01 ff c4 00 1f 00 00 01 05 01 01 01 ... >,
         name: 'Me.jpeg',
         encoding: '7bit',
         mimetype: 'image/jpeg',
         truncated: false,
         size: 108021 
    } 
}

Или тот, который вы получили: # 2

var part = { 
    'files[0]': { 
    data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f ... >,
     name: 'e0ZnCwP.jpg',
     encoding: '7bit',
     mimetype: 'image/jpeg',
     truncated: false,
     size: 259454 
}, 
'files[1]': { 
    data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff c0 00 11 08 06 40 04 c8 03 01 22 00 02 11 01 03 11 01 ff c4 00 1f 00 00 01 05 01 01 01 ... >,
     name: 'Me.jpeg',
     encoding: '7bit',
     mimetype: 'image/jpeg',
     truncated: false,
     size: 108021 
} 

Разница между ними заключается в # 1 , переменная files является массивом, поэтому вы получаете к ним доступ следующим образом: part.files[i]. Но в # 2 (ваш случай) вы получили ключ / значения массива, поэтому вы получаете доступ к своему файлу с помощью part['files['+i+']'].

0 голосов
/ 30 октября 2018

object.files[0] читает первый элемент свойства с именем files, который считается массивом. Ваш объект не имеет этого свойства, имеет строковые ключи files[0], files[1] и т. Д. Это, вероятно, ошибка, если это не так, вы можете косвенно ссылаться на эти реквизиты как object["files[0]"], object["files[1]"], object["files[" + index + "]"] и т. Д.

...