Node js流中的执行顺序

Order of execution in Node js streams

我想在将图像保存到磁盘之前验证图像。我正在使用 GM 库。

// Running an Express app

app.post('/image', function(req, res) {
  var stream = 
    gm(req)
     .size({ bufferStream: true }, function(err, size) {    
       if (size.width > 2000) {
        return res.send('Too big, aborting upload!');
       }
     })
     .stream(function(err, stdout, stderr) { 
      save(stdout, res);    
    });    
});

function save(stream, res) {
  var file = fs.createWriteStream('./test-image.png');
  stream.pipe(file);
  res.send('Saving image to disk');
}

我的问题是我在验证图像之前执行了 save 函数。如何确保流仅在有效时继续?

GM 将所有操作添加到列表中并在写入操作之前执行它们,因此这种行为是有意义的。这是一个解决方法:

app.post('/image', function(req, res) {                                 
  var file = fs.createWriteStream('./test-image.png');

  var stream = 
    gm(req)
     .size({ bufferStream: true }, function(err, size) {    
       if (size.width > 2000) {
        return res.send('Too big, aborting upload!');
       }
       this.stream().pipe(file);  
       res.send('Saving image to disk');

});