Node.js: Comment faire pour lire un flux de données dans une mémoire tampon?

J'ai écrit un assez simple fonction qui télécharge une image à partir d'une URL donnée, de les redimensionner et de les télécharger pour les S3 (à l'aide de 'g' et 'knox), je n'ai aucune idée de si je suis en train de faire la lecture d'un flux vers une mémoire tampon correctement. (tout fonctionne, mais est-ce la bonne voie?)

aussi, je veux comprendre quelque chose au sujet de la boucle d'événements, comment puis-je savoir qu'une invocation de la fonction ne sera pas de fuite de quelque chose ou de changer le 'buf' variable à une autre déjà en cours d'exécution invocation (ou ce scénario est impossible, car les rappels sont des fonctions anonymes?)

var http = require('http');
var https = require('https');
var s3 = require('./s3');
var gm = require('gm');
module.exports.processImageUrl = function(imageUrl, filename, callback) {
var client = http;
if (imageUrl.substr(0, 5) == 'https') { client = https; }
client.get(imageUrl, function(res) {
if (res.statusCode != 200) {
return callback(new Error('HTTP Response code ' + res.statusCode));
}
gm(res)
.geometry(1024, 768, '>')
.stream('jpg', function(err, stdout, stderr) {
if (!err) {
var buf = new Buffer(0);
stdout.on('data', function(d) {
buf = Buffer.concat([buf, d]);
});
stdout.on('end', function() {
var headers = {
'Content-Length': buf.length
, 'Content-Type': 'Image/jpeg'
, 'x-amz-acl': 'public-read'
};
s3.putBuffer(buf, '/img/d/' + filename + '.jpg', headers, function(err, res) {
if(err) {
return callback(err);
} else {
return callback(null, res.client._httpMessage.url);
}
});
});
} else {
callback(err);
}
});
}).on('error', function(err) {
callback(err);
});
};
InformationsquelleAutor Gal Ben-Haim | 2013-01-10