为什么在下一个中间件函数中包含res.send的时候,图像不会渲染?

我是新手expressjs,这是我的应用程序js:当我删除res.send ie阿曼在下一个中间件图像下载,但是当我包括,图像不下载。 我很困惑,我的意思是中间件一个接一个地执行,一个是执行的,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.download(__dirname + '/instagram_5.jpg')是asynchronous进程,所以在res.download在后台工作时执行next()

所以你不需要再调用res.send()next()因为在res.download()完成之后它会自动响应客户端。

使用res.sendFile()从公用文件夹提供文件

 /* 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'); }); 
 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"); });