Nodejs filesystem

From wikinotes

filepaths

See https://nodejs.org/api/path.html

const path = require('path');

const filepath = path.resolve('foo.txt')  // relative to abspath
path.dirname(filepath)                    // '/home/you'
path.basename(filepath)                   // 'foo.txt'
path.extname(filepath)                    // '.txt'

// nodejs does not expand ~
// so replace it with the envvar
'~/.zshrc'.replace('~', process.env.HOME)

filesystem

See https://nodejs.org/api/fs.html

There are 2x separate APIs for interacting with files.

const fs = require('fs/promises'); // async/promise based
const fs = require('fs');          // callback based

promise api

const fs = require('fs/promises');

// async/await
await fs.rename('/tmp/foo.txt', '/tmp/bar.txt');

// chained promises (? can I)
fs.rename('/tmp/foo.txt', '/tmp/bar.txt')
    .then()
    .then()

callback api

const fs = require('fs');
const contents = 'abc\ndef';

// async, callback based
fs.writeFile('/var/tmp/foo.txt', contents, err => {
    if (err) { console.log(err); }
})

// synchronous
fs.writeFileSync('/var/tmp/foo.txt', contents)