res.download() 在执行命令后抛出请求中止错误
res.download() throws request aborted error after executing command
我正在尝试创建一个包含一些 .txt 文件的存档,然后我想下载这个存档。请看下面的代码:
async function archiveAndDownload(res) {
const bashCommand = ...
const archive = ...
exec(bashCommand, (err, stdout, stderr) => {
if (err && err.code != 1) {
console.log(err);
res.status(500).json({ error: `Error.` });
return;
} else {
if (stderr) {
console.log(stderr);
}
}
});
res.status(200).download(archive, async (err) => {
if (err) {
console.log("Cannot download the archive " + err);
} else {
fs.unlink(archive);
}
});
}
async function getX(req, res) {
try {
await archiveAndDownload(res);
} catch (err) {
console.log("Error: " + err);
}
}
尝试从 Postman 对其进行测试时,出现此错误:
Cannot download the archive Error: Request aborted
我该如何解决?感谢您的宝贵时间!
(附带说明,如果我尝试在 else
上将下载操作移动到 exec 中,它会起作用,但我想要有 2 个单独的代码块)
我想通了..
问题出在 getX
函数上。遗憾的是我忘记了最后有一个 finally
块总是执行..
所以整个 getX
函数是:
async function getX(req, res) {
try {
await archiveAndDownload(res);
} catch (err) {
console.log("Error: " + err);
} finally {
res.end(); // <<<< this was my problem, I removed the whole finally block
}
}
很抱歉我没有在 post 中编写整个函数,但我终于想通了,这很好。希望这会对某人有所帮助。所以要小心:永远不要在 res.download
之后 res.render
、res.send
、res.end
等。您需要先让下载完成。
我正在尝试创建一个包含一些 .txt 文件的存档,然后我想下载这个存档。请看下面的代码:
async function archiveAndDownload(res) {
const bashCommand = ...
const archive = ...
exec(bashCommand, (err, stdout, stderr) => {
if (err && err.code != 1) {
console.log(err);
res.status(500).json({ error: `Error.` });
return;
} else {
if (stderr) {
console.log(stderr);
}
}
});
res.status(200).download(archive, async (err) => {
if (err) {
console.log("Cannot download the archive " + err);
} else {
fs.unlink(archive);
}
});
}
async function getX(req, res) {
try {
await archiveAndDownload(res);
} catch (err) {
console.log("Error: " + err);
}
}
尝试从 Postman 对其进行测试时,出现此错误:
Cannot download the archive Error: Request aborted
我该如何解决?感谢您的宝贵时间!
(附带说明,如果我尝试在 else
上将下载操作移动到 exec 中,它会起作用,但我想要有 2 个单独的代码块)
我想通了..
问题出在 getX
函数上。遗憾的是我忘记了最后有一个 finally
块总是执行..
所以整个 getX
函数是:
async function getX(req, res) {
try {
await archiveAndDownload(res);
} catch (err) {
console.log("Error: " + err);
} finally {
res.end(); // <<<< this was my problem, I removed the whole finally block
}
}
很抱歉我没有在 post 中编写整个函数,但我终于想通了,这很好。希望这会对某人有所帮助。所以要小心:永远不要在 res.download
之后 res.render
、res.send
、res.end
等。您需要先让下载完成。