Неожиданный токен - в JSON в позиции 0 при загрузке файла в angular - PullRequest
0 голосов
/ 28 февраля 2020

Я новичок в загрузке файлов в angular. Я пытаюсь отправить файл, используя объект данных формы. однако я получаю эту странную ошибку «Неожиданный токен - в JSON в позиции 0». Почему я получаю эту ошибку при отправке данных формы? Когда я загружаю данные через форму почтальона, это работает.

1) post component.ts

  onFileSelected(ev) {
    this.selectedFile = <File>ev.target.files[0]
    console.log(this.selectedFile)
    }

  createTour() {
    this.submitting = true
    this.toursService.postTour(this.tour, this.selectedFile)
    .subscribe(() => {
      this.submitting = false
      this.notfiy.showSuccess('tour created!')
    }, err => {
      this.submitting = false
      console.log(err)
      this.notfiy.showError(err)
    } )
  }
}

2) post service.ts

postTour(data: Tour, image) {
        let fd = new FormData()
        for(let key in data) {
            fd.append(key, data[key])
        }
        fd.append('imageCover', image, image.name)
        return this.http.post(this.url, fd, this.getOptionsWithToken())
    }

3) back end POST-маршрут

.post(
    multerConfigs.setMulter,
    multerConfigs.uploadSingle,
    multerConfigs.uploadMultiple,
    tourController.createTour)

4) multerConfigs. js

exports.setMulter = upload.fields([
    {
        name: 'imageCover', maxCount: 1
    },
    {
        name: 'profilePic', maxCount: 1
    },
    {
        name: 'images', maxCount: 12
    }
])

exports.deleteFile = (file, dest) => {
    let p = path.join(process.cwd(), `/uploads/${dest}/` + file)
    fs.unlink(p, (err, done) => err ? console.log(err) : '')
}

async function resize(file, path, body) {
    await sharp(file)
        .resize(400, 400)
        .toFormat('png')
        .png({ quality: 90 })
        .toFile(`uploads/${path}/${body}`)
}

exports.uploadSingle = (req, res, next) => {
    try {
        if(!req.files) return next()
        if (req.files.imageCover) {
            req.body.imageCover = `${Date.now()}-image.png`
            // console.log('filename>>>', req.files.imageCover[0]) => does NOT have filename
            resize(req.files.imageCover[0].buffer, 'tours', req.body.imageCover)
        }

        if (req.files.profilePic) {
            req.body.profilePic = `${Date.now()}-user.png`
            resize(req.files.profilePic[0].buffer, 'users', req.body.profilePic)
        }

        next()
    } catch (e) { next(e) }
}
...