使用基于浏览器的JavaScript和Node操作本地文件系统

我正在做一个需要允许用户从浏览器与文件系统交互的项目。 我在编写客户端JavaScript方面有很多经验,而且我也有很多编写Node脚本的经验,比如网页抓取,数据分析和文件系统工作。 但是这个项目会让用户在浏览器中改变一些东西,然后在本地保存这些数据(并且最终保存到一个web服务器上),而且我也没有这方面的经验。

我已经安装了browserify和browserify-fs来在浏览器中使用Node的fs模块,并使用来自browserify-fs自述文件的示例创build一个目录,向其中写入一个文件,然后读取该文件:

var fs = require('browserify-fs'); fs.mkdir("/home", function(err){ if (err) throw err; fs.writeFile("/home/hello-world.txt", "Hello world!", function(err) { if (err) throw err; fs.readFile("/home/hello-world.txt", "utf-8", function(err, data) { if (err) throw err; console.log(data); }); }); }); 

这个“起作用”的意思是它logging了“Hello world!” 在控制台。 但据我所知,它不会在本地创build目录或保存文件。 我有一些模糊的感觉,就是在浏览器中暂时保存这些东西,当我离开的时候它们被删除。 但我想实际上创build一个目录,并在本地保存一个文件。 我可以单独使用JavaScript吗? 是否有一个很好的教程,如何“基于浏览器的JavaScript和节点之间的”闭环“?

更新

我已经接受了TJ Crowder的回应 – ExpressJS确实使JavaScript中的客户端 – 服务器通信相对简单。 我现在正在做的是,我将用户的条目保存到全局JSON对象。 当用户点击“保存”button时,我使用string化的JSON更新<form>元素中隐藏的<input>元素的值。 然后我提交表单,Express的app.post()加上模块body-parser给我req.body所有东西。 然后我可以执行正常的节点文件系统操作。

当然,浏览器托pipe的JavaScript不能访问用户机器的文件系统(目前有一天,某种沙箱访问可能发生 – 最后一次尝试失败,但这并不意味着下一个必须)。

所以要做到这一点,你需要两件事:

  1. 浏览器部分,与用户进行UI。

  2. 一个在用户机器上运行的节点(因此可以访问文件系统),浏览器部分用来执行实际的文件操作。

可能最简单的方法来进行交互将是HTTP,你可以使用ExpressJS平凡支持。

例如,如果用户想要删除一个文件:

  1. 用户点击某个东西说“删除这个文件”
  2. 浏览器JavaScript通过ajax通过HTTP发送命令给Node进程
  3. 节点进程执行删除并报告成功/失败
  4. 浏览器JavaScript显示结果

你不能在Javascript中完成这个工作。 由于安全原因,在浏览器上运行的Javascript还没有足够的权限(有提议)。

https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction#restrictions

由于文件系统是沙盒,Web应用程序无法访问其他应用程序的文件。 您也无法将文件读取或写入用户硬盘驱动器上的任意文件夹(例如“我的图片”和“我的文档”)。