Node.js如何读取文件,然后用两个单独的函数编写相同的文件?
我想要做的是读取一个文件,然后能够在写入文件时使用该信息执行其他操作。 例如:
读取文件写入文件,同时执行MD5哈希,数字签名等。
我可以使用fs.readfile和fs.writefile作为一个操作,只是从Web服务器将文件复制到我的电脑,但我不认为我仍然可以做这些相同的操作。 无论如何,跳过之间的东西。 如何使用fs.readfile和writefile来创build两个单独的函数来复制文件? 这是我一直在努力,是的,我已经广泛阅读这些论坛寻找答案。
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');
我希望能够下载任何types的文件,只需制作原始副本,将md5哈希等附加到JSON文件。 这可能是稍后的问题。
正如dandavis在他的评论中所build议的那样, readFile
什么也不做,因为它是一个asynchronous调用。 看看这个答案,以获取更多信息。
简而言之,asynchronous调用永远不会等待结果返回。 在你的例子中, getData
不会等待readFile()
返回你想要的结果,但会立即结束。 asynchronous调用通常通过传递callbacks
来处理,这是readFile
和writeFile
的最后一个参数。
无论如何,有两种方法可以做到这一点:
1.asynchronous执行(这是正确的方法):
function 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'); }); }); }
2.同步进行。 你的代码不会有太大的改变,你只需要分别用readFile
和writeFile
来代替readFile
和writeFile
。 警告 :使用这种方法不仅违背最佳实践,而且违背了使用nodejs的目的(除非你有一个非常合理的理由)。
编辑 :根据OP的请求,这里是一个可能的方法来分离两个方法,例如,使用callback:
function 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'); }); }); }
这样,你就可以将读取部分(在getFileContent
)从复制部分分离出来。