Что мне здесь не хватает?Узел, Экспресс, req.files ['image0'] - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь извлечь данные из массива req.files, но точечная запись не работает, и я не понимаю, чего мне не хватает.

Настройка моего мопса:

if product.image
   .col-lg-1.pull-left
       img.product-img(src='/images/' + product.image, alt=product.title)
   .col-lg-11.pull-right
       input(type="hidden", name="mainImg", value=product.image)
       input.form-control(type="file", name="image0", id="image0")
   .clear
else
    .col-lg-11.pull-right
        input.form-control(type="file", name="image0", id="image0" value="")

Возвращает массив req.files, как и ожидалось:

console.log(req.files)

результат:

{ image0:
   [ { fieldname: 'image0',
   originalname:'Some_image.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
   destination: 'images',
   filename: 'bdad727257698479d84157ad0211b05f.jpg',
   path: 'images\\bdad727257698479d84157ad0211b05f.jpg',
   size: 109205 } ],
  image1:
   [ { fieldname: 'image1',
   originalname:'Some_image.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
   destination: 'images',
   filename: '9546c3810ad9d6c471fde641a30078fd.jpg',
   path: 'images\\9546c3810ad9d6c471fde641a30078fd.jpg',
   size: 109205 } ],
  image2:
   [ { fieldname: 'image2',
   originalname:'Some_image.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
   destination: 'images',
   filename: '0bd6d9da3b53348f5b9145723d4da340.jpg',
   path: 'images\\0bd6d9da3b53348f5b9145723d4da340.jpg',
   size: 78420 } ]
 } '#################'

Возвращает первый элемент массива, как и ожидалось:

console.log(req.files['image0'], '#################')

результат:

[ { fieldname: 'image0',
originalname: 'Some_Image_Name.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'images',
filename: '28efd1e7544820acc0ac174ac8404ea9.jpg',
path: 'images\\28efd1e7544820acc0ac174ac8404ea9.jpg',
size: 109205 } ] '#################'

Возвращает неопределенное значение, и я не понимаю, почему:

console.log(req.files['image0'].fieldname)

Вот моя настройка мультитера:

const upload = multer({dest: 'images', storage: imgStorage, fileFilter: fileFilter });
// app.use(upload.array('image'));

app.use(upload.fields([
    {
          name: 'image0', maxCount: 1
    },
    {
          name: 'image1', maxCount: 1
    },
    {
          name: 'image2', maxCount: 1
    },
    {
          name: 'image3', maxCount: 1
    }
])

В конечном итоге я хочу настроить цикл для итерации возможных 20 или более изображений, но сначала я хочу получить данные, прежде чем попытаться выполнить цикл таким образом.Этот проект предназначен для загрузки нескольких изображений, когда изображения не перезаписываются, если не переданы данные изображения и если переданы данные, только указанное изображение перезаписывается.Вот почему я использую upload.fields вместо .any () или array ().

Любая помощь или совет будут с благодарностью.

1 Ответ

0 голосов
/ 29 декабря 2018

Вы пытаетесь получить доступ к свойству массива, как будто это объект.Это недопустимый Javascript.

Попробуйте: req.files['image0'][0].fieldname

req.files['image0'] возвращает:

[ { fieldname: 'image0',
originalname: 'Some_Image_Name.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'images',
filename: '28efd1e7544820acc0ac174ac8404ea9.jpg',
path: 'images\\28efd1e7544820acc0ac174ac8404ea9.jpg',
size: 109205 } ]

Что представляет собой массив.

req.files['image0'][0]возвращает:

{ fieldname: 'image0',
originalname: 'Some_Image_Name.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'images',
filename: '28efd1e7544820acc0ac174ac8404ea9.jpg',
path: 'images\\28efd1e7544820acc0ac174ac8404ea9.jpg',
size: 109205 }

Который является объектом.

Вы можете получить доступ к свойству fieldname из этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...