Node.js 为什么在下一个中间件函数中包含res.send时图像不呈现

Node.js 为什么在下一个中间件函数中包含res.send时图像不呈现,node.js,express,middleware,Node.js,Express,Middleware,我是expressjs的新手, 这是我的应用程序js:当我删除res.send,即下一个中间件中的Aman时,图像正在下载,但当我包含该文件时,图像不会下载。我很困惑,我的意思是中间件一个接一个地执行,一个被执行,然后next()将调用,然后next,但这里不是这样,为什么是这样。?谁能给我解释一下吗 var express = require('express'); var app = express(); app.get('/', function(req, res

我是expressjs的新手, 这是我的应用程序js:当我删除res.send,即下一个中间件中的Aman时,图像正在下载,但当我包含该文件时,图像不会下载。我很困惑,我的意思是中间件一个接一个地执行,一个被执行,然后next()将调用,然后next,但这里不是这样,为什么是这样。?谁能给我解释一下吗

    var express = require('express');
    var app = express();

    app.get('/', function(req, res) {
        res.send("Default");
    });

    var Aperson = function(req, res, next) {
        console.log("File is downloaing");
        res.download(__dirname + '/instagram_5.jpg');
        next();
    }
    app.get("/download", [Aperson], function(req, res) {
        res.send("AMan");
    });
    app.use(function(req, res) {
        res.status(404).send("Sorry cant find that");
    });

    app.listen(4000, function() {
        console.log("App started on port 4000");
    });
使用
res.sendFile()
public文件夹提供文件

/* Public static directory */
app.use(express.static(__dirname + '/public'));
/* Serve image for example inside the assets folder*/
app.get('/download', function(req, res){       
      res.sendFile('/assets/image.png');      
});
由于
res.download(
res.download+'/instagram\u 5.jpg')是异步过程,因此在
res.download
在后台工作时执行
next()


因此,您甚至不需要调用
res.send()
next()
,因为
res.download()
完成后,它将自动响应客户端。

bas whi toh baat hai。如果我正在执行res.download()函数,那么不管我是否编写了下一个函数,它都应该在同一行终止。但是为什么在我写这个“res.send(“AMan”);”的时候它仍然会转到下一个控制器,否则如果删除这一行,那么图像实际上是下载的,没有任何问题@ajit jainit将退出,因为执行了
next()
语句,您的代码进入下一个函数,而res.download()仍在队列中,在执行
res.send()后等待执行回调
事件循环将处理res.send在屏幕上生成的
AMan
res.download
回调,并关闭响应流。。您应该在代码中添加以下行,然后观察控制台中的行为:使用此
res.download(uuu dirname+'/instagram_5.jpg',(err)=>{console.log(“异步函数”);}而不是
res.download(uu dirname+'/instagram_5.jpg')
2。使用
app.get(“/download”,[Aperson],函数(req,res){res.send(“AMan”);}中的
console.log(“任何”)
;before
res.send()`@EddysapataError:无法设置发送后的标题。表示您收到错误!您需要返回错误我将更新代码/_http_outgoing.js:356抛出新错误('发送后无法设置头')^我是新来的,我不知道如何把错误的快照发送给你。
var express = require('express');
var app = express();
/* Public directory */ 
app.use("/images", express.static(__dirname + '/public/images'));
app.get('/', function(req, res) {
    res.send("Default");
});

var Aperson = function(req, res, next) {
    console.log("File is downloaing");
    res.download(__dirname + '/instagram_5.jpg');
    next();
}
app.get('/download', function(req, res, err){
  if (err) {
    return res.send();
  }
  var file = __dirname + '/images/image.png'; //here comes your path 
  var filename = path.basename(file);
  var mimetype = mime.lookup(file);
  res.setHeader('Content-disposition', 'attachment; filename=' + filename);
  res.setHeader('Content-type', mimetype);
  var filestream = fs.createReadStream(file);
  filestream.pipe(res);
});

app.use(function(req, res) {
    res.status(404).send("Sorry cant find that");
});

app.listen(4000, function() {
    console.log("App started on port 4000");
});