Нужна одновременная работа поста Axios для данных и файлов из React - PullRequest
0 голосов
/ 06 октября 2018

Я могу получить от своего аксиосообщения некоторые данные (пример ниже) или FormData.Как бы мне настроить вызов, чтобы я мог отправить все сразу?Проблема в том, что если я отправляю оба одновременно, он вообще ничего не отправляет.Мой текущий звонок:

  async handleSubmit(e) {
e.preventDefault();
const { name, email, message } = this.state;
const formData = new FormData();
formData.append('file',this.state.file)
const config = {
    headers: {
        'content-type': 'multipart/form-data'
    }
}

const form = await axios.post("/api/formPDF", {
  name, ******
  email, *****
  message ****
}).post("/api/formPDF", formData, config);
}

В разделе, который я указал *, я считаю, что моя проблема в этом.То, как я его сейчас отправляю, у меня будет доступ к имени / электронной почте / сообщению на req.body.Если я удаляю объект из трех и заменяю его на formData, он будет правильно отправлять файл по электронной почте, но все явно не определено.Если я отредактирую это так:

const form = await axios.post("/api/formPDF", {
  name,
  email,
  message,
  formData

Это сделает так, что и мой req.body, и способ, которым я разбираю свой файл, являются пустым объектом.Мой соответствующий код сервера:

app.post("/api/formPDF", (req, res) => {
var fileLoc, fileExt, fileName, fileEmail, fileMessage;

var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {

console.log("Files: ", files);
fileLoc = files.file.path;
fileExt = files.file.name.split('.').pop();

});

nodemailer.createTestAccount((err, account) => {

const htmlEmail = `
  <h3>Contact Details</h3>
  <ul>
    <li>Name: ${req.body.name}</li>
    <li>Email: ${req.body.email}</li>
  </ul>
  <h3>Message</h3>
  <p>${req.body.message}</p>
`

let transporter = nodemailer.createTransport({
  name: *removed*,
  host: *removed*,
  port: 465,
  secure: true,
  auth: {
    user: *removed*,
    pass: *removed*
  }
})

let mailOptions = {
  from: *removed*,
  to: *removed*,
  replyTo: req.body.email,
  subject: "New Message",
  text: req.body.message,
  html: htmlEmail,
  attachments: [
    {
      filename: `${req.body.name}Resume.${fileExt}`,
      path: fileLoc
    }
 ]
};

fileLoc = "";

transporter.sendMail(mailOptions, (err, info) => {
  if (err) {
    return console.log(err)
  }
})
})
});

Я что-то упустил, что приводит к пустым объектам?Я знаю, что невозможно прочитать на стороне клиента formData, но я должен быть в состоянии увидеть это на моем сервере.Заранее спасибо.

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