несколько загрузок файлов не работают в pug и express - PullRequest
0 голосов
/ 23 января 2020

Я начинающий, когда дело доходит до этой топи c, поэтому, пожалуйста, помогите мне. Я пытаюсь загрузить несколько файлов. Для этого я использовал метод upload.fields. несколько файлов загружаются, когда я делаю это с помощью почтальона, но когда я пытаюсь сделать это с помощью pug, это не так. когда я загружаю первый файл, он работает, но когда я загружаю второй, первый тоже исчезает.

// 1 express код загрузки

exports.uploadPhotos =  upload.fields([
    { name: 'abcd', maxCount: 2 },
    { name: 'photos', maxCount: 10 }
])

exports.resizePhotos = catchAsync(async (req, res, next) => {
    if (!req.files.photos) return next()
     req.body.photos = []
    //  console.log('req.files>>>', req.files)
    await Promise.all(req.files.photos.map(async (file, i) => {
        let filename = `tour-${Date.now()}-${i + 1}.jpeg`
        await sharp(file.buffer)
        .resize(500,500)
        .toFormat('jpeg')
        .jpeg({ quality: 90 })
        .toFile(`public/img/programs/${filename}`)
        req.body.photos.push(filename)
    })
    )
    console.log(req.body.photos)
    // console.log(req.body)
    return next()
})

exports.updateMe = catchAsync(async (req, res, next) => {
    let doc = await User.findByIdAndUpdate(req.user._id, req.body, { runValidators: true, new: true })
    if (!doc) {
        return next(new AppError('No document found with that ID', 404))
    }
    res.status(200).json({
        status: 'success!',
        data: { doc }
    })
})

2 // шаблон pug для загрузки - здесь user.photos должен быть массивом, верно? когда я делаю user.photos [0], это работает, но во втором случае, если я делаю user.photos [1], это не работает !!! почему?

  if user
    h1 i am the admin
  form.form.form-user-data      
    .form__group.form__photo-upload
    each img, i in user.photos
      input.form__upload(type='file', accept= 'image/*' id="photos" name="photos")
      img.form__user-photo(src=`/img/programs/${user.photos[0]}`, alt='User photo')
      label(for='photos') Choose new photo
    .form__group.right
      button.btn.btn--small.btn--green Save settings
  .line  

3 // код переднего конца js (вызов API-интерфейса бэкенда и обработка форм)

let upload = async (data) => {
    try {
        let url = 'http://localhost:4200/updateMe' 
        let res = await axios({
            method: 'PATCH',
            url, data
        })
        console.log('vayo  ni bro')
        if (res.data.status === 'success') {
            console.log('doneeeeee')
        }
    } catch (err) {
        console.log('vaena ni bro',err)
    }
}

if (document.querySelector('.form-user-data')) {
    document.querySelector('.form-user-data').addEventListener('submit', e => {
        e.preventDefault()
        let form = new FormData()
        form.append('photos', document.querySelector('#photos').files[0])
        console.log(form)
        upload(form)
    })
}


if (document.querySelector('.form-user-data2')) {
    document.querySelector('.form-user-data2').addEventListener('submit', e => {
        e.preventDefault()
        let form = new FormData()
        form.append('photos', document.querySelector('#photos').files[0])
        upload(form)
    })
}
...