节点jsstream中的执行顺序

我想在将图像保存到磁盘之前validation图像。 我正在使用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'); } 

我的问题是,我已经validation图像之前执行savefunction。 如何确保只有在stream有效的情况下才能继续stream?

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