Node.js协调文件

我试图连接多个文件,并保存到一个新的文件,使用节点js createWriteStreamcreateReadStream 。 我有一个小错误,我想在其内容之前打印出文件名。 但是,文件名总是打印在输出文件的顶部。 请看我的结果输出,如果你有任何想法,请帮忙!

谢谢!

test.js

 var async = require('async'); var fs = require('fs'); var path = require('path'); var SOURCE_FOLDER = '/tmp/test'; var SOURCE_FILE_PATTERN = /\.json$/ var REPORT_FILE = path.join(SOURCE_FOLDER, 'output.html'); var writeStream = fs.createWriteStream(REPORT_FILE, { flags: 'w', encoding: 'UTF-8' }); var appendReport = function appendReport(file, callback) { var readStream = fs.createReadStream(file, { flags: 'r', encoding: 'UTF-8' }); readStream.pipe(writeStream, { end: false }); readStream.on('end', callback); }; fs.readdir(SOURCE_FOLDER, function (err, files) { if (err) { console.log(err); } else { writeStream.write("<html><body><pre>\n"); async.forEach(files, function (file, callback) { var filePath = path.join(SOURCE_FOLDER, file); fs.stat(filePath, function (err, stats) { if (err) { callback(err); } else if (stats.isFile() && file.match(SOURCE_FILE_PATTERN)) { writeStream.write("\n" + filePath); appendReport(filePath, callback); } else { callback(); } }); }, function (err) { writeStream.write("\n</pre></body></html>"); }); } }); 

我目前的成绩:

 # node test.js; cat /tmp/test/output.html <html><body><pre> /tmp/test/a.json /tmp/test/b.jsoncontent A content B </pre></body></html> 

我的预期成果:

 # node test.js; cat /tmp/test/output.html <html><body><pre> /tmp/test/a.json content A /tmp/test/b.json content B </pre></body></html> 

问题是, async.forEach === async.each和async.each()并行调用迭代器。 你想要的是async.eachSeries()来代替。