Попытка получить информацию из FormData (), не может отправить с помощью внешнего интерфейса - PullRequest
0 голосов
/ 23 декабря 2019

Когда я отправляю данные с помощью почтальона, проходит заголовок, описание и изображение, которое я отправляю.

Это мой массив сообщений:

router.post('/', uploadS3.array('meme',3),(req, res, next)=>{
  // res.json(req.file.location)
  console.log(`req.files =================${req.headers}`);
  // console.log("req.file.location===",req.file.location, "req.body===",req.body);

  const locationURL = req.files.map(item=>item.location);

  //Send image alongside with other form fields
  postModel.create({...req.body,image:locationURL}, (error, returnedDocuments) => {
    if (error) return next(error);
    res.json(returnedDocuments);
  })

})

мой почтальон: enter image description here

Когда я пытаюсь отправить данные, используя мой интерфейс,он не переходит к бэкэнду должным образом, ответ, который я получаю, является ничем, если я не включаю изображение, а заголовок и описание не передаются .... обратите внимание, что мой postModel ожидает, что заголовок и описание находятся внутри запроса.body

postModel.create({...req.body,image:locationURL}

Я отправляю данные, добавляя их к объекту FormData ()

Для ясности, setFiles является установщиком для файла const [file, setFiles] = useState({ selectedFile: null, loaded: 0 });

const onChangeFile = event => {
  if (maxSelectFile(event) && checkMimeType(event) && checkFileSize(event)) {
    setFiles({
      selectedFile: event.target.files
    });
  }
  console.log(event.target.files)
}

const submitFormHandle = event => {
  const data = new FormData();
  for (let i = 0; i < file.selectedFile.length; i++) {
    data.append("meme", file.selectedFile[i]);
  }
  data.append("title", title);
  data.append("description", description);
  axios
    .post("http://localhost:3200/api/posts/", data)
    .then(res => {
      toast.success('upload success')
    })
    .catch(err => {
      toast.error('upload fail')
    })
}

1 Ответ

1 голос
/ 23 декабря 2019

Вы можете опубликовать данные axios, используя FormData, используя следующий подход:

Для поля попробуйте использовать set для FormData объекта и для изображения используйте append, как это.

Измените свой код на:

data.set("title", title);
data.set("description", description);

Пожалуйста, дайте мне знать, если это не сработает.

...