作者:贰少爷闯天涯_964 | 来源:互联网 | 2023-01-16 12:33
我正在制作一个项目,需要允许用户从浏览器与文件系统进行交互.我在编写客户端Javascript方面有很多经验,而且我有很多为Web抓取,数据分析和文件系统工作编写Node脚本的经验.但是这个项目将允许用户在浏览器中更改内容,然后在本地保存这些数据(最终保存到Web服务器) - 我对此没有任何经验.
我已经安装了browserify和browserify-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之间"关闭循环"的好教程?
更新
我接受了TJ Crowder的回应 - ExpressJS确实在Javascript中进行客户端 - 服务器通信相对简单.我现在正在做的是,我将用户的条目保存到全局JSON对象.当用户单击"保存"按钮时,我使用字符串化的JSON 更新
元素中隐藏元素的值
.然后我提交表单,Express app.post()
和模块体解析器给我一切req.body
.然后我可以执行正常的节点文件系统操作.
1> T.J. Crowder..:
当然,浏览器托管的Javascript无法访问用户计算机的文件系统(目前;有一天,可能会发生某种沙盒访问 - 最后一次尝试失败,但这并不意味着下一次尝试失败).
所以要做到这一点,你需要两件:
浏览器片,与用户一起完成UI.
节点片段,在用户的机器上运行(因此可以访问文件系统),浏览器片段用于执行实际的文件操作.
可能最简单的交互方式是HTTP,您可以使用ExpressJS轻松支持.
例如,如果用户想要删除文件:
用户点击"删除此文件"
浏览器Javascript通过ajax通过HTTP将命令发送到Node进程
节点进程执行删除并报告成功/失败
浏览器Javascript显示结果