使用基于浏览器的JavaScript和节点

时间:2017-09-28 11:19:40

标签: javascript node.js

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

我已安装browserifybrowserify-fs在浏览器中使用Node的fs模块,并使用browserify-fs README中的示例创建目录,编写一个提交给它,然后读取该文件:

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之间?

更新

我接受了T.J. Crowder的回应 - ExpressJS确实使用JavaScript进行客户端 - 服务器通信相对简单。我现在正在做的是,我将用户的条目保存到全局JSON对象。当用户点击&#34; save&#34;按钮,我使用字符串化的JSON更新<input>元素中隐藏的<form>元素的值。然后我提交表单,快递app.post()加上模块body-parser给我req.body中的所有内容。然后我可以执行正常的节点文件系统操作。

2 个答案:

答案 0 :(得分:5)

当然,浏览器托管的JavaScript无法访问用户计算机的文件系统(目前;有一天,可能会发生某种沙盒访问 - last attempt失败,但这并不意味着下一个到)。

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

  1. 一个浏览器片段,与用户一起完成UI。

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

  3. 可能最简单的交互方式是HTTP,您可以使用ExpressJS轻松支持。

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

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

答案 1 :(得分:0)

你不能纯粹用Javascript来做这件事。由于安全原因,在浏览器上运行的Javascript还没有足够的权限(有提案)。

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

  

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