为什么pipe道不能在callback中工作?
我有以下服务器:
http.createServer(function (req, res) { fs.mkdir(__dirname + '/output', function (err) { req.pipe(fs.createWriteStream(__dirname + '/output/file.txt')); res.end(); }); }).listen(3000);
然后,我使用请求将stream传输到服务器。
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(…)移到mkdircallback之外时,它每次都有效。 有谁能解释为什么会发生?
由于mkdir
是asynchronous的,请求中的数据是在创build目录时发出的。 您需要指示stream不发送数据,直到稍后使用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);