如何在节点js

时间:2018-10-11 04:56:47

标签: node.js

在下面的这段代码中,我可以读取file1.txt数据并将其写入file2.txt,但是我想读取 file1 file2 ,< em> file3 和 file4 ,然后将所有这些数据写入file5.txt。怎么做?任何人都可以以我是初学者的身份编辑以下代码

 var fs = require("fs");

    fs.readFile('file1.txt',function(err, data){
        fs.writeFile('file2.txt', data)
    });

3 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是嵌套多个readFile,然后将writeFile嵌套在其中。像这样:

var fs = require("fs");

fs.readFile('file1.txt',function(err1, data1){
    fs.readFile('file2.txt',function(err2, data2){
        fs.readFile('file3.txt',function(err3, data3){
             if(err1 || err2 || err3){
                   throw new Error();
             }
             let data = data1+data2+data3;
             fs.writeFile('file4.txt', data);
         });
    });
});

实现此目标的另一种方法是使用Bluebird或类似的Promise库。

var fs = require('fs');
var Promise = require('bluebird');
var readFile = Promise.promisify(fs.readFile);
var writeFile = Promise.promisify(fs.writeFile);

var promiseArray = [readFile('file1.txt'), readFile('file2.txt'), readFile('file3.txt')];

Promise.all(promiseArray).then((dataArray)=>{
     var data = '';
     for(var i=0;i<dataArray.length;i++){
          data += dataArray[i];
     }
     return writeFile('file4.txt', data);
});

我建议使用第二种方法。希望这会有所帮助:)

答案 1 :(得分:0)

我将为此选择Promise库。使对象thenable可以提高代码的可读性,并防止代码在右侧增长。我的解决方案与其他解决方案几乎一样,只是我使用的是nodejs Buffer来串联其他文件的数据。

const fs = require('fs')
const file1 = 'a.txt'
const file2 = 'b.txt'

const allPromises = [file1, file2].map(eachFile => {
    return new Promise((resolve, reject) => {
        fs.readFile(eachFile, (err, data) => {
            if(err) {
                reject(err)
            }else {
                resolve(data)
            }
        })
    })
})

Promise.all(allPromises).then(onfulfilled => {
    const totalBufferContent = Buffer.concat(onfulfilled)
    fs.writeFile('c.txt', totalBufferContent, (err) => {
        if(err) throw err;

        console.log('Done')
    })
})

答案 2 :(得分:0)

我发现最简单的解决方案是安装concat软件包-它会为您完成所有工作:)请注意,writeFile已不推荐使用writeFileSync(代码[DEP0013])。

首先安装软件包

npm install concat

然后输入代码

const concat = require('concat'); //Or use ES6 Syntax
const fs = require('fs');


concat(['1.txt', '2.txt', '3.txt']).then(files_being_written => 
fs.writeFileSync('your-concated-file.txt', files_being_written))

// or this way
// concat(['1.txt', '2.txt', '3.txt'], 'your-concated-file.txt') 

来源:

https://www.npmjs.com/package/concat https://github.com/nodejs/node/issues/14770