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