如何从远程服务器下载一堆文件,并使用Node.js以特定顺序连接它们? [英] How do I download a bunch of files from a remote server, and concatenate them in a certain order using Node.js?

查看:84
本文介绍了如何从远程服务器下载一堆文件,并使用Node.js以特定顺序连接它们?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to read the contents of a bunch of javascript files on a server, and then concatenate them into a new local file. The files have to be concatenated in a specific order (specified in an array). Here's what I have so far:

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

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

This downloads the files and recreates them locally, but it seems a little clunky. When I tried to just write a single file directly from a looped set of requests, I got the chunks out of order....I feel like there must be an easier way....

提前致谢。

推荐答案

使用 async 请求

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

这篇关于如何从远程服务器下载一堆文件,并使用Node.js以特定顺序连接它们?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆