Я могу получить от своего аксиосообщения некоторые данные (пример ниже) или 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, но я должен быть в состоянии увидеть это на моем сервере.Заранее спасибо.