4

我有以下服务器:

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 回调之外时,它每次都有效。有人可以解释为什么会这样吗?

4

1 回答 1

4

由于mkdir是异步的,因此在创建目录时会发出请求中的数据。pause您需要使用and来指示流直到稍后才发出数据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);
于 2012-07-08T21:24:08.167 回答