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

时间:2017-08-17 10:20:57

标签: node.js express middleware

我是expressjs的新手, 这是我的应用程序js:当我删除res.send,即下一个中间件中的Aman图像正在下载但是当我包括它时,图像没有下载。我很困惑,我的意思是中间件一个接一个地执行,一个被执行然后next()将唤起然后接下来但是在这里它不是那样的,为什么会这样。任何人都可以向我解释这个

true

3 个答案:

答案 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");
});