如何从远程服务器下载一堆文件,并使用Node.js以特定顺序连接它们?

use*_*359 1 javascript node.js

我试图在服务器上读取一堆javascript文件的内容,然后将它们连接成一个新的本地文件.文件必须按特定顺序连接(在数组中指定).这是我到目前为止所拥有的:

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);
     });
};
Run Code Online (Sandbox Code Playgroud)

这会下载文件并在本地重新创建它们,但它看起来有点笨重.当我试图直接从循环请求集中编写单个文件时,我得到了无序的块...我觉得必须有一个更简单的方法....

提前致谢.

Lin*_*iel 5

使用异步请求:

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(''));
});
Run Code Online (Sandbox Code Playgroud)