为什么管道在回调中不起作用



>我有以下服务器:

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是异步的,因此在创建目录时会发出请求中的数据。您需要指示流直到稍后使用 pauseresume 发出数据。

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);

相关内容

  • 没有找到相关文章

最新更新