一尘不染

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

node.js

我正在制作一个项目,该项目需要允许用户从浏览器与文件系统进行交互。我有很多编写客户端JavaScript的经验,并且有很多编写Node脚本来处理Web抓取,数据分析和文件系统工作的经验。但是该项目将允许用户更改浏览器中的内容,然后将数据保存到本地(并最终保存到Web服务器)–我对此没有经验。

我已经安装了browserifybrowserify-
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文件系统操作。


阅读 214

收藏
2020-07-07

共1个答案

一尘不染

自然,浏览器托管的JavaScript无法访问用户计算机的文件系统(目前;总有一天,可能会发生某种沙盒访问方式-上一次尝试失败,但这并不意味着下一次尝试)。

为此,您需要两件:

  1. 一个浏览器,用于与用户进行UI。

  2. 一个Node块,它在用户的计算机上运行(因此可以访问文件系统),浏览器块用来执行实际的文件操作。

片段之间最简单的交互方式可能是HTTP,您可以使用ExpressJS轻松支持它。

因此,例如,如果用户要删除文件:

  1. 用户单击说“删除此文件”的内容
  2. 浏览器JavaScript通过Ajax通过HTTP将命令发送到Node进程
  3. 节点进程进行删除并报告成功/失败
  4. 浏览器JavaScript显示结果
2020-07-07