使用node.js中的fs覆盖文件的最佳方法是什么

Tom*_*atz 22 javascript node.js

我正在尝试覆盖现有文件.我首先检查文件是否存在使用:

fs.existsSync(path)
Run Code Online (Sandbox Code Playgroud)

如果文件没有退出我正在创建和编写使用:

fs.writeFileSync(path,string) 
Run Code Online (Sandbox Code Playgroud)

问题是当文件已经存在并且我想重写其所有内容时.有没有一个单行解决方案,到目前为止我搜索并找到了使用fs.truncate&fs.write的解决方案,但有一个一击的解决方案吗?

mih*_*hai 50

fs.writeFileSync并且fs.writeFile默认情况下覆盖该文件,如果您想要这样做,则无需额外检查.这在文档中提到:

fs.writeFile

异步将数据写入文件,替换文件(如果已存在).

  • 当文件已经存在时,我收到“文件已经存在”的错误。这是问题的主要部分,但无论如何都是 tnx。 (3认同)

Tom*_*atz 8

找到了解决方案.fs.writeFileSync获取可以作为对象的选项的第三个参数.所以,如果你得到"文件已存在",你应该这样做.

fs.writeFileSync(path,content,{encoding:'utf8',flag:'w'})
Run Code Online (Sandbox Code Playgroud)

  • 从我在[docs](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback)中看到的那一面看,该标志是默认标志。 (2认同)

Kar*_*rim 5

当您说“最佳方式”时,我认为是性能和可扩展性,我会说使用异步方法

fs.writeFileSync(path,string) 顾名思义是同步的(阻塞 api)线程在请求​​的整个生命周期中都保持不变,这意味着您的 nodejs 线程将被阻塞,直到操作完成,并且在生产环境中具有来自多个客户端的同时连接的这种行为可能会杀死您应用程序。

不要在单行代码上思考,更少的代码并不意味着更好的性能。