我正在尝试读取服务器上一堆 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);
});
};
这会下载文件并在本地重新创建它们,但看起来有点笨拙。当我试图直接从一组循环的请求中直接写入单个文件时,我的 block 乱序了……我觉得一定有更简单的方法……
提前致谢。
最佳答案
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 - 如何从远程服务器下载一堆文件,并使用 Node.js 按特定顺序连接它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620435/