fs.readFileSync says 'no such file or directory' although require() returns the file correctly

Viewed 1170

I need to read a JSON file dynamically. This is why require() won't cut it. It doesn't simply update the file until NodeJS server restarts. This is why I have to use fs.readFile or fs.readFileSync.

When I use, const data = require("../data.json"); it just reads it properly. No issues at all, but like I said, it doesn't update dynamically.

When I use const data = () => fs.readFileSync("../data.json", { encoding: "utf8" }); it simply returns Error: ENOENT: no such file or directory, open '../data.json'

I also tried fs.readFile. Doesn't work.

Most weirdly, when I try to read another json file with fs.readFileSync, I'm seeing values that I changed days ago. It reads an old version. I don't understand. That old version doesn't exist anymore. I manually checked.

I tried npm install, npm cache clean --force. I can't think of anything else.

2 Answers

require takes a path relative to the directory the module file is in.

readFileSync takes a path relative to the current working directory.

These must be different for you.

Consider using path.resolve with your relative path and __dirname

Related