最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Node.js如何读取文件然后用两个单独的函数写入相同的文件?

IT培训 admin 5浏览 0评论

Node.js如何读取文件然后用两个单独的函数写入相同的文件?

我想要做的是读取一个文件,然后在我写文件时能够使用该信息执行其他操作。例如:

读取文件写入文件,同时执行MD5哈希,数字签名等。

我可以使用fs.readfile和fs.writefile作为一个操作,只是将文件从Web服务器复制到我的计算机,但我不认为我仍然可以执行这些相同的操作。无论如何,跳过之间的东西。如何使用fs.readfile和writefile创建两个单独的函数来复制文件?这是我一直在努力的,是的,我已经广泛阅读这些论坛以寻找答案。

var fs = require('fs');



function getData(srcPath) { 
fs.readFile(srcPath, 'utf8', function (err, data) {
        if (err) throw err;
        return data;
        }
    );
}


function writeData(savPath, srcPath) {
        fs.writeFile (savPath, (getData(srcPath)), function(err) {
        if (err) throw err;
            console.log('complete');
        }
    );
}
//getData ('./test/test.txt');
writeData ('./test/test1.txt','./test/test.txt');

我希望能够下载任何类型的文件,只需制作原始副本,并将md5哈希等附加到JSON文件中。这可能是后来的问题。

回答如下:

正如dandavis在他的评论中所建议的那样,readFile什么都不做,因为它是异步调用。查看this answer以获取有关这意味着什么的更多信息。

简而言之,异步调用永远不会等待结果返回。在您的示例中,getData不会等待readFile()返回您想要的结果,但会立即完成。异步调用通常通过传递callbacks来处理,readFilewriteFilefunction copyData(savPath, srcPath) { fs.readFile(srcPath, 'utf8', function (err, data) { if (err) throw err; //Do your processing, MD5, send a satellite to the moon, etc. fs.writeFile (savPath, data, function(err) { if (err) throw err; console.log('complete'); }); }); } 的最后一个参数。

无论如何,有两种方法可以做到这一点:

1.异步(这是正确的方式):

readFile

2.同步。您的代码不会有太大变化,您只需要分别用writeFilereadFileSync替换writeFileSyncfunction getFileContent(srcPath, callback) { fs.readFile(srcPath, 'utf8', function (err, data) { if (err) throw err; callback(data); } ); } function copyFileContent(savPath, srcPath) { getFileContent(srcPath, function(data) { fs.writeFile (savPath, data, function(err) { if (err) throw err; console.log('complete'); }); }); } 。警告:使用此方法不仅违反了最佳做法,而且违背了使用nodejs的目的(除非您有非常合理的理由)。

编辑:根据OP的请求,这里有一种可能的方法来分离这两种方法,例如,使用回调:

getFileContent

这样,您将读取部分(在function readFile(srcPath) { return new Promise(function (resolve, reject) { fs.readFile(srcPath, 'utf8', function (err, data) { if (err) { reject(err) } else { resolve(data); } }); }) } function writeFile(savPath, data) { return new Promise(function (resolve, reject) { fs.writeFile(savPath, data, function (err) { if (err) { reject(err) } else { resolve(); } }); }) } 中)与复制部分分开。

Node.js如何读取文件然后用两个单独的函数写入相同的文件?

我想要做的是读取一个文件,然后在我写文件时能够使用该信息执行其他操作。例如:

读取文件写入文件,同时执行MD5哈希,数字签名等。

我可以使用fs.readfile和fs.writefile作为一个操作,只是将文件从Web服务器复制到我的计算机,但我不认为我仍然可以执行这些相同的操作。无论如何,跳过之间的东西。如何使用fs.readfile和writefile创建两个单独的函数来复制文件?这是我一直在努力的,是的,我已经广泛阅读这些论坛以寻找答案。

var fs = require('fs');



function getData(srcPath) { 
fs.readFile(srcPath, 'utf8', function (err, data) {
        if (err) throw err;
        return data;
        }
    );
}


function writeData(savPath, srcPath) {
        fs.writeFile (savPath, (getData(srcPath)), function(err) {
        if (err) throw err;
            console.log('complete');
        }
    );
}
//getData ('./test/test.txt');
writeData ('./test/test1.txt','./test/test.txt');

我希望能够下载任何类型的文件,只需制作原始副本,并将md5哈希等附加到JSON文件中。这可能是后来的问题。

回答如下:

正如dandavis在他的评论中所建议的那样,readFile什么都不做,因为它是异步调用。查看this answer以获取有关这意味着什么的更多信息。

简而言之,异步调用永远不会等待结果返回。在您的示例中,getData不会等待readFile()返回您想要的结果,但会立即完成。异步调用通常通过传递callbacks来处理,readFilewriteFilefunction copyData(savPath, srcPath) { fs.readFile(srcPath, 'utf8', function (err, data) { if (err) throw err; //Do your processing, MD5, send a satellite to the moon, etc. fs.writeFile (savPath, data, function(err) { if (err) throw err; console.log('complete'); }); }); } 的最后一个参数。

无论如何,有两种方法可以做到这一点:

1.异步(这是正确的方式):

readFile

2.同步。您的代码不会有太大变化,您只需要分别用writeFilereadFileSync替换writeFileSyncfunction getFileContent(srcPath, callback) { fs.readFile(srcPath, 'utf8', function (err, data) { if (err) throw err; callback(data); } ); } function copyFileContent(savPath, srcPath) { getFileContent(srcPath, function(data) { fs.writeFile (savPath, data, function(err) { if (err) throw err; console.log('complete'); }); }); } 。警告:使用此方法不仅违反了最佳做法,而且违背了使用nodejs的目的(除非您有非常合理的理由)。

编辑:根据OP的请求,这里有一种可能的方法来分离这两种方法,例如,使用回调:

getFileContent

这样,您将读取部分(在function readFile(srcPath) { return new Promise(function (resolve, reject) { fs.readFile(srcPath, 'utf8', function (err, data) { if (err) { reject(err) } else { resolve(data); } }); }) } function writeFile(savPath, data) { return new Promise(function (resolve, reject) { fs.writeFile(savPath, data, function (err) { if (err) { reject(err) } else { resolve(); } }); }) } 中)与复制部分分开。

发布评论

评论列表 (0)

  1. 暂无评论