我有以下服务器:
http.createServer(function (req, res) {
fs.mkdir(__dirname + '/output', function (err) {
req.pipe(fs.createWriteStream(__dirname + '/output/file.txt'));
res.end();
});
}).listen(3000);
然后我使用request将流传输到服务器。
var fs = require('fs');
var request = require('request');
var crs = fs.createReadStream(__dirname + '/file.txt');
var r = request.post('http://0.0.0.0:3000');
crs.pipe(r);
有时它可以工作,但大部分时间/output/file.txt都是空的。当我将req.pipe(...)移到mkdir回调之外时,它每次都有效。有人可以解释为什么会这样吗?
答案 0 :(得分:4)
由于mkdir
是异步的,因此在创建目录时会发出请求中的数据。您需要指示流在以后使用pause
和resume
不会发出数据。
http.createServer(function (req, res) {
req.pause();
fs.mkdir(__dirname + '/output', function (err) {
req.pipe(fs.createWriteStream(__dirname + '/output/file.txt'));
req.resume();
res.end();
});
}).listen(3000);