需要同时工作Axios帖子以获取来自React的数据和文件

时间:2018-10-06 06:31:02

标签: node.js reactjs axios

我可以让axios帖子发送一些数据(下面的示例)或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客户端,但是我应该能够在服务器上看到它。预先感谢。

0 个答案:

没有答案