Node.js 在Express JS中使用res.download成功下载文件后,如何使用res.redirect?

Node.js 在Express JS中使用res.download成功下载文件后,如何使用res.redirect?,node.js,express,Node.js,Express,我试图做的是下载一个文件,下载后,删除给定的文件,重定向到另一个页面并显示一条flash消息,请参见下面的代码: fs.writeFileSync(user.username + "_invoice_data.xml", tofile); res.download(user.username + "_invoice_data.xml", function(err){ if(err){ fs.unlinkSync(user.username + "_invoice_dat

我试图做的是下载一个文件,下载后,删除给定的文件,重定向到另一个页面并显示一条flash消息,请参见下面的代码:

fs.writeFileSync(user.username + "_invoice_data.xml", tofile);

res.download(user.username + "_invoice_data.xml", function(err){
    if(err){
        fs.unlinkSync(user.username + "_invoice_data.xml");
        req.flash("error", "Valid. Download error...");
        return res.redirect('/arinvoicedata');
    }
    else{
        fs.unlinkSync(user.username + "_invoice_data.xml");
        req.flash("success", "Valid. Downloading...");
        return res.redirect('/arinvoicedata');
    }
});
但是,我收到以下错误消息:

错误[ERR\u HTTP\u HEADERS\u SENT]:发送后无法设置头 给客户

文件本身会被下载,但是上面的错误会一直使服务器崩溃。这是否意味着,res.download回调中的res.redirect是不允许的?你有什么建议?谢谢

发送请求响应后,不允许发送标头。 下载进度跟踪需要客户端javascript 发送请求响应后,不允许发送标头。 下载进度跟踪需要客户端javascript
这实际上是不可能的,你必须在客户端处理。这实际上是不可能的,你必须在客户端处理。谢谢。这不完全是我想听到的,但规则就是规则:不客气。有一些工具可以让你的生活变得轻松。让我告诉你大概的想法。在前端使用http请求工具,比如前端的fetch或axios。在获取文件时,获取接收到的字节数和剩余字节数的信息。如果剩余字节为0,则使用window.location.hrefThanks重定向网页。这不完全是我想听到的,但规则就是规则:不客气。有一些工具可以让你的生活变得轻松。让我告诉你大概的想法。在前端使用http请求工具,比如前端的fetch或axios。在获取文件时,获取接收到的字节数和剩余字节数的信息。如果剩余字节为0,您可以使用window.location.hrefy重定向网页您可能需要尝试此操作您应该始终在答案中添加一些解释,以提高其质量并使其更清晰。请阅读您可能想尝试的内容。您应该始终为您的答案添加一些解释,以提高其质量并使其更加清晰。请阅读
const express = require('express');

const path = require('path');

const port = 3000;

var app =express();

app.get("/success", (req, res)=>{

res.sendFile(path.join(__dirname, "/success.html");

});

app.get("/download", (req, res)=>{

res.download(path.join(__dirname, "/img", "/download.jpg");

res.redirect("/success");

});

app.listen(process.env.PORT || port, (err)=>{

if(err) throw err;

console.log(`app listening on port ${port}`);

});