Aaron Wilson
Aaron Wilson

Reputation: 33

fs.writeFile() and fs.readFile() strange behavior

I'm writing a desktop app using electron and react. I want to store some information in a JSON file. I've tried both web-fs and browserify-fs to accomplish this, and neither is working as expected. My setup is as follows

project/app/(react files)

project/index.html

project/js/bundle.js

project/main.js

I'm using watchify to compile all the changes in the react files to the bundle.js file (which is read by index.html).

The following is ran from app.js in project/app/ (which is also where the JSON file is stored)

import * as fs from 'browserify-fs';
...
fs.writeFile('./fileData.json', data, function(err){
    if(err)console.log(err);
    else console.log("success");
   });

'success' is always logged to the console, however the contents of the file is not updated, regardless of how I specify the path.

I've tried './fileData.json'

'/fileData.json'

__dirname + '/fileData.json' (which tells me that __dirname couldn't be found)

(absolute path to fileData.json) (which tells me that /Users could not be found)

After doing the above, if I change the writeFile to readFile and log the contents to the console, the updated file is printed. Even if I delete the fileData.json file, the file is successfully read.

This makes me believe that fs.writeFile() is writing to a different directory, not the one the process is being ran from. Despite this, I cannot find any other fileData.json files anywhere on my computer. There's a couple other weird behaviors:

  1. When logging __filename (which should log the entire filepath), the only thing printed is "/app.js" with no leading file path.

  2. Calling "process.cwd()" just gives me "/"

  3. When calling fs.writeFile() with the full file path "/Users/...." I get a folder not found error

Anyone know what could be causing this behavior and how to fix it?

Edit - I also tried getting the absolute path by adding

var path = require('path')
var appDir = path.resolve('./app');

which again only gives me /app when it should be returning an absolute path

Upvotes: 3

Views: 3701

Answers (1)

ccnokes
ccnokes

Reputation: 7105

Can you confirm the same behavior when not using browserify-fs? Just use plain old fs. (Note you can do this straight from the Chrome dev tools console).

Looking at browserify-fs's page, it looks like it implements a kind of virtual file system using a dependency called level-filesystem (which uses level db). So the files you're expecting to get created aren't. They're being created within a level db database. You could probably find a level db file somewhere that has the information you're trying to write directly to the file system in it.

For simple writing/reading of a JSON file, I'd recommend https://github.com/sindresorhus/electron-config.

Upvotes: 1

Related Questions