现在我与 NodeJS 使用PDFKit生成PDF文件,我想删除后,通过电子邮件发送的文件使用Nodemailer,这里是我的代码:
reportcontroller.sendrecordsemail = async (req,res)=>{
try{
const doc = new PDF({
bufferPages: true,
compress: false,
margins: {top: 20, left: 10, right: 10, bottom: 20}});
const filename = `Report-${datehelper.dateformatlarge(Date.now())}.pdf`;
const stream = res.writeHead(200, {
'Content-Type': 'application/pdf',
'Content-Disposition': `attachment; filename=${filename}`
});
const records = await queryaux.showrecords();
let count = 1;
const arecords = records[0].map((record) =>{
arecord ={
Name: record.Name,
RecordType: record.RecordType,
RecordDate: datehelper.dateformatshort(record.RecordDate),
EntryTime: record.EntryTime,
ExitTime: record.ExitTime,
TotalHours: record.TotalHours
}
count++;
return arecord;
})
doc.setDocumentHeader({...
})
doc.addTable([...
})
doc.render();
const writestream = fs.createWriteStream(`Node/src/download/${filename}`);
doc.pipe(writestream);
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: '-----',
pass: '-----',
},
});
const mailOptions = {
from: "----",
to:"----",
subject:"Test",
text:"Test",
attachments:[
{
filename: `${filename}`,
path:`Node/src/download/${filename}`
}
]
}
transporter.sendMail(mailOptions, (error, info) => {
if(error){
res.status(500).send({Error: error})
}
else{
console.log('Mail sent successfully!');
}
});
doc.on('data',(data)=>{stream.write(data)});
doc.on('end',()=>{stream.end()});
doc.end();
fs.unlink(`Node/src/download/${filename}`,function(err){
if(err){
throw err;
}else{
console.log('Successfully deleted the file');
}
})
}
catch(error){
console.log({Error: error})
}
}
这是我在控制台上看到的:
Successfully deleted the file
Mail sent successfully!
当我检查我的电子邮件时,文件就在那里,所以Nodemailer正在工作,但是,即使我使用fs.unlink()删除了文件,该文件仍然在文件夹中。如果我再次请求请愿书,我得到了下一个错误:
Error: ENOENT: no such file or directory, open 'Node/src/download/Report.pdf'
有人知道我做错了什么吗?或者我有什么办法可以弥补?
我将非常感激,谢谢。
2条答案
按热度按时间0sgqnhkj1#
您可以在文档处理完成后删除pdf文件。
gjmwrych2#
创建单独的函数发送电子邮件,将回调函数作为参数,当您的
sendMail() {
这是一个函数的nodemailer
包在javascript函数将返回,你可以调用自己的回调删除文件,你会得到更好的想法与下图:在此图像中,您可以了解如何使用回调参数声明自定义
sendMail
函数:你可以这样称呼它: