Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js包含文件_Node.js_Node.js Stream - Fatal编程技术网

Node.js包含文件

Node.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

我正在尝试连接多个文件并使用节点js
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