Comment puis-je télécharger un ensemble de fichiers à partir d'un serveur distant et les concaténer dans un certain ordre en utilisant Node.js?

J'essaie de lire le contenu d'un tas de fichiers javascript sur un serveur, puis de les concaténer dans un nouveau fichier local. Les fichiers doivent être concaténés dans un ordre spécifique (spécifié dans un tableau). Voici ce que j'ai jusqu'ici:

var http = require('http'); var fs = require('fs'); var commonWebFiles = getCommonWebDependenciesInOrder(); var fileContents = []; var path = '/folder/'; fs.mkdir("target"); for(var i = 0, l = commonWebFiles.length; i < l; ++i){ getFileContents(path, commonWebFiles[i]); } function getCommonWebDependenciesInOrder(){ //Hit manager to get an correctly ordered array of common web dependencies //Stub return [ 'file1.js', 'file2.js', 'file3.js' ]; }; function getFileContents(path, filename){ var contents = ""; var writeStream = fs.createWriteStream("target/" + filename, {'flags': 'a'}); var options = { host: 'ahost.net', port: 80, path: path + filename }; var req = http.get(options, function(res) { res.on('data', function(chunk) { contents += chunk; }); res.on('end', function() { writeStream.write(contents, encoding='binary'); writeStream.end(); fileContents[filename] = contents; }); }).on('error', function(e) { console.log("Got error: " + e.message); }); }; 

Cela permet de télécharger les fichiers et de les recréer localement, mais cela semble un peu effrayant. Lorsque j'ai essayé d'écrire un seul fichier directement à partir d'un ensemble de requêtes en boucle, j'ai eu les blocs en panne … J'ai l'impression qu'il doit y avoir un moyen plus facile …

Merci d'avance.

Utilisez async et demandez :

 var fs = require('fs'), async = require('async'), request = require('request'); // Utility function to overcome request's callback (err, response, body) where we're only interested in err and body function simpleRequest(url, callback) { request(url, function(err, response, body) { callback(err, body); }); } async.map(urls, simpleRequest, function(err, results) { if(err) return console.error(err); fs.writeFile(outfile, results.join('')); });