expressjs - 管道到响应流不起作用
expressjs - piping to response stream doesn't work
我有这个基本的快递应用程序:
var express = require('express');
var app = express();
var PORT = 3000;
var through = require('through');
function write(buf) {
console.log('writing...');
this.queue('okkkk');
}
function end() {
this.queue(null);
}
var str = through(write, end);
/* routes */
app.get('/', function(req, res){
res.send("Hello!");
})
app.post('/stream', function(req, res){
var s = req.pipe(str).pipe(res);
s.on('finish', function() {
console.log('all writes are now complete.'); // printed the first time
});
});
/* listen */
app.listen(PORT, function () {
console.log('listening on port ' + PORT + '...');
});
当我 post 一些数据到 /stream
端点 启动服务器后第一次 我得到 okkk
作为响应是我所期望的。但是,在那之后,对 /stream
端点的任何请求都只是超时,而不是 return 任何响应。
为什么会这样?这里到底发生了什么?
当我用 req.pipe(through(write, end)).pipe(res)
替换 req.pipe(str).pipe(res)
时它起作用了,这基本上确保为每个请求创建一个新的直通流实例。
我遇到了同样的问题,看起来 res
没有正确完成。所以我在我的流中添加了一个回调并自己结束了que res
。这解决了我的问题:
stream.on('end', () => res.end());
stream.pipe(res);
我有这个基本的快递应用程序:
var express = require('express');
var app = express();
var PORT = 3000;
var through = require('through');
function write(buf) {
console.log('writing...');
this.queue('okkkk');
}
function end() {
this.queue(null);
}
var str = through(write, end);
/* routes */
app.get('/', function(req, res){
res.send("Hello!");
})
app.post('/stream', function(req, res){
var s = req.pipe(str).pipe(res);
s.on('finish', function() {
console.log('all writes are now complete.'); // printed the first time
});
});
/* listen */
app.listen(PORT, function () {
console.log('listening on port ' + PORT + '...');
});
当我 post 一些数据到 /stream
端点 启动服务器后第一次 我得到 okkk
作为响应是我所期望的。但是,在那之后,对 /stream
端点的任何请求都只是超时,而不是 return 任何响应。
为什么会这样?这里到底发生了什么?
当我用 req.pipe(through(write, end)).pipe(res)
替换 req.pipe(str).pipe(res)
时它起作用了,这基本上确保为每个请求创建一个新的直通流实例。
我遇到了同样的问题,看起来 res
没有正确完成。所以我在我的流中添加了一个回调并自己结束了que res
。这解决了我的问题:
stream.on('end', () => res.end());
stream.pipe(res);