Node.js: Jak odczytać strumień w buforze?

Napisałem całkiem prostą funkcję, która pobiera obraz z podanego adresu URL, zmienia jego rozmiar i przesyła do S3 (używając 'gm' i 'knox'), nie mam pojęcia, czy poprawnie wykonuję odczyt strumienia do bufora . (wszystko działa, ale czy jest to właściwy sposób?)

chcę też zrozumieć coś o pętli zdarzeń, skąd mam wiedzieć, że jedno wywołanie funkcji nie spowoduje wycieku ani nie zmieni zmiennej buf na inną już uruchomioną wywołanie (lub ten scenariusz jest niemożliwy, ponieważ wywołania zwrotne są anonimowe Funkcje?)

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

questionAnswers(5)

yourAnswerToTheQuestion