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