我正在制作一个项目,该项目需要允许用户从浏览器与文件系统进行交互。我有很多编写客户端JavaScript的经验,并且有很多编写Node脚本来处理Web抓取,数据分析和文件系统工作的经验。但是该项目将允许用户更改浏览器中的内容,然后将数据保存到本地(并最终保存到Web服务器)–我对此没有经验。
我已经安装了browserify和browserify- fs以在浏览器中使用Node的fs模块,并使用browserify-fs自述文件中的示例创建目录,向其中写入文件,然后读取该文件:
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); }); }); });
在记录“ Hello world!”的意义上,这种“有效”!在控制台中。但据我所知,它不会在本地创建目录或保存文件。我有些模糊的感觉,它是将这些内容临时保存在浏览器中,当我离开时将其删除。但是我实际上想创建一个目录并将文件保存在本地。我可以单独使用JavaScript吗?关于如何“关闭”基于浏览器的JavaScript和Node之间的循环,是否有很好的教程?
我已经接受了TJ Crowder的答复–实际上,ExpressJS确实使JavaScript中的客户端- 服务器通信相对简单。我现在正在做的是,将用户的条目保存到全局JSON对象。当用户单击“保存”按钮时,我使用字符串化的JSON 更新<input>元素中隐藏元素的值<form>。然后,我提交表单,Express的app.post()加上模块body- parser为我提供了中的所有内容req.body。然后,我可以执行正常的Node文件系统操作。
<input>
<form>
app.post()
req.body
自然,浏览器托管的JavaScript无法访问用户计算机的文件系统(目前;总有一天,可能会发生某种沙盒访问方式-上一次尝试失败,但这并不意味着下一次尝试)。
为此,您需要两件:
一个浏览器,用于与用户进行UI。
一个Node块,它在用户的计算机上运行(因此可以访问文件系统),浏览器块用来执行实际的文件操作。
片段之间最简单的交互方式可能是HTTP,您可以使用ExpressJS轻松支持它。
因此,例如,如果用户要删除文件: