I am making a project that needs to allow users to interact with the file system from a browser. I have a lot of experience writing client-side JavaScript, and I have a lot of experience writing Node scripts for things like web scraping, data analysis, and file system work. But this project will let users change things in the browser, and then save that data locally (and, eventually, to a web server) – and I have no experience with this.
I've installed browserify and browserify-fs to use Node's fs module in the browser, and used the example from the browserify-fs README to create a directory, write a file to it, and then read that file:
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);
});
});
});
This "works" in the sense that it logs "Hello world!" in the console. But as far as I can tell, it does not create a directory or save a file locally. I have some vague sense that it is saving these things temporarily in the browser, and that they are deleted when I navigate away. But I want to actually create a directory and save a file in it locally. Can I do that with JavaScript alone? Is there a good tutorial on how to "close the loop" between browser-based JavaScript and Node?
Update
I've accepted T.J. Crowder's response – ExpressJS does, indeed, make client-server communication in JavaScript relatively simple. What I'm doing now is, I'm saving the user's entries to a global JSON object. When the user clicks a "save" button, I update the value of a hidden <input>
element in a <form>
element with the stringified JSON. Then I submit the form, and Express's app.post()
plus the module body-parser give me everything in req.body
. Then I can perform normal Node file system operations.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…