Node.js包含文件
我正在尝试连接多个文件并使用节点jsNode.js包含文件,node.js,node.js-stream,Node.js,Node.js Stream,我正在尝试连接多个文件并使用节点jscreateWriteStream和createReadStream保存到一个新文件。我有一个小错误,我想打印出文件名之前的内容。但是,文件名始终打印在输出文件的顶部。请看我的结果输出,如果你有任何想法为什么,请帮助 谢谢 test.js var async = require('async'); var fs = require('fs'); var path = require('path'); var SOURCE_FOLDER = '/tmp/tes
createWriteStream
和createReadStream
保存到一个新文件。我有一个小错误,我想打印出文件名之前的内容。但是,文件名始终打印在输出文件的顶部。请看我的结果输出,如果你有任何想法为什么,请帮助
谢谢
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>");
});
}
});
var async=require('async');
var fs=需要('fs');
var path=require('path');
var SOURCE_FOLDER='/tmp/test';
var SOURCE\u FILE\u PATTERN=/\.json$/
var REPORT_FILE=path.join(SOURCE_文件夹'output.html');
var writeStream=fs.createWriteStream(报告文件{
旗帜:“w”,
编码:“UTF-8”
});
var appendReport=函数appendReport(文件,回调){
var readStream=fs.createReadStream(文件{
旗帜:“r”,
编码:“UTF-8”
});
readStream.pipe(writeStream{
完:错
});
readStream.on('end',回调);
};
fs.readdir(源文件夹,函数(错误,文件){
如果(错误){
控制台日志(err);
}否则{
writeStream.write(“\n”);
forEach(文件、函数(文件、回调){
var filePath=path.join(源文件夹,文件);
stat(文件路径,函数(err,stats){
如果(错误){
回调(err);
}else if(stats.isFile()&&file.match(源文件模式)){
writeStream.write(“\n”+文件路径);
appendReport(文件路径、回调);
}否则{
回调();
}
});
},函数(err){
writeStream.write(“\n”);
});
}
});
我当前的结果:
# 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>
#node test.js;cat/tmp/test/output.html
/tmp/test/a.json
/tmp/test/b.json内容A
内容B
我的预期结果:
# 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>
#node test.js;cat/tmp/test/output.html
/tmp/test/a.json
内容A
/tmp/test/b.json
内容B
问题在于,它可以并行地调用迭代器。相反,你想要的是。答对了!谢谢@mscdex