>我有以下服务器:
http.createServer(function (req, res) {
fs.mkdir(__dirname + '/output', function (err) {
req.pipe(fs.createWriteStream(__dirname + '/output/file.txt'));
res.end();
});
}).listen(3000);
然后我使用请求将流通过管道传输到服务器。
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 回调之外时,它每次都有效。谁能解释为什么会这样?
由于
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);