我可以让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客户端,但是我应该能够在服务器上看到它。预先感谢。