javascript - Node js流中的执行顺序

标签 javascript node.js express stream graphicsmagick

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

});

关于javascript - Node js流中的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937085/

相关文章:

mysql - 从mysql数据库查询密码哈希返回十进制数的缓冲区数组而不是字符串

javascript - 如何在具有冲突库的网站上正确包含 lodash/下划线?

javascript - Angular 2 : check empty form if radio button is set

javascript - 条件为假,但 if 语句中的代码在 JavaScript 中执行

mysql - LoopBack 4 REST API 使用 Mysql 获取记录的示例

javascript - 访问 CSV 文件

node.js - 如何在 Express.js 中重新加载当前页面?

javascript - 解构嵌套对象,但保留对嵌套对象的引用

node.js - 在 Node JS 中同时使用 JWT 和 session 进行身份验证系统

node.js - 在 nodejs 中使用 fs.stat 的问题