Nodejs 文件在发送响应之前被删除 (res.send)
Nodejs File get deleted before sending response (res.send)
这里的问题是文件在向客户端发送响应之前从服务器中删除,并显示错误,因为此路径上没有图像。
// Here some code
res.status(200).sendFile(path.join(__dirname, "../../image", `/${response.id}.png`));
// Delete image from server
fs.unlink(imagePath, function (err) {
if (err) throw err;
console.log('File deleted!');
})
您将需要监控到 res.sendFile()
的回调,以便在安全删除文件之前了解发送实际完成的时间。
res.sendFile()
是异步的,因此它 returns 在作业完成之前,因此您在 res.sendFile()
完成之前删除了文件。使用回调了解实际完成的时间。
let fname = path.join(__dirname, "../../image", `/${response.id}.png`);
res.status(200).sendFile(fname, err => {
if (err) {
console.log(err);
res.sendStatus(500);
}
fs.unlink(fname, function(err) => {
// log any error
if (err) {
console.log(err);
}
});
});
注意:当您将回调传递给 res.sendFile()
时,您必须手动处理错误情况并发送错误响应、重试、发送替代内容等...以发送一些适当的响应。
我也想知道为什么您发送一个文件名并试图删除另一个文件名。对您要发送的文件名和要删除的文件名使用相同的局部变量是否有意义?
这里的问题是文件在向客户端发送响应之前从服务器中删除,并显示错误,因为此路径上没有图像。
// Here some code
res.status(200).sendFile(path.join(__dirname, "../../image", `/${response.id}.png`));
// Delete image from server
fs.unlink(imagePath, function (err) {
if (err) throw err;
console.log('File deleted!');
})
您将需要监控到 res.sendFile()
的回调,以便在安全删除文件之前了解发送实际完成的时间。
res.sendFile()
是异步的,因此它 returns 在作业完成之前,因此您在 res.sendFile()
完成之前删除了文件。使用回调了解实际完成的时间。
let fname = path.join(__dirname, "../../image", `/${response.id}.png`);
res.status(200).sendFile(fname, err => {
if (err) {
console.log(err);
res.sendStatus(500);
}
fs.unlink(fname, function(err) => {
// log any error
if (err) {
console.log(err);
}
});
});
注意:当您将回调传递给 res.sendFile()
时,您必须手动处理错误情况并发送错误响应、重试、发送替代内容等...以发送一些适当的响应。
我也想知道为什么您发送一个文件名并试图删除另一个文件名。对您要发送的文件名和要删除的文件名使用相同的局部变量是否有意义?