我是expressjs的新手, 这是我的应用程序js:当我删除res.send,即下一个中间件中的Aman图像正在下载但是当我包括它时,图像没有下载。我很困惑,我的意思是中间件一个接一个地执行,一个被执行然后next()将唤起然后接下来但是在这里它不是那样的,为什么会这样。任何人都可以向我解释这个
true
答案 0 :(得分:1)
由于res.download(__dirname + '/instagram_5.jpg')
是异步过程,next()
在后台运行时会执行res.download
。
因此,您甚至无需拨打res.send()
和next()
,因为在res.download()
完成后,它会自动响应客户端。
答案 1 :(得分:0)
使用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');
});
答案 2 :(得分:0)
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");
});