Nodejs filesystem: Difference between revisions

From wikinotes
Line 45: Line 45:
await fs.rename('/tmp/foo.txt', '/tmp/bar.txt');
await fs.rename('/tmp/foo.txt', '/tmp/bar.txt');


// chained promises (? can I)
// I don't believe these functions have return values enabling them to be chained in .then()
fs.rename('/tmp/foo.txt', '/tmp/bar.txt')
    .then()
    .then()
</syntaxhighlight>
</syntaxhighlight>
</blockquote><!-- promise api -->
</blockquote><!-- promise api -->

Revision as of 20:42, 30 July 2021

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

Use the filesystem module to interact with files (read, write, size, ..).
See https://nodejs.org/api/fs.html

There are 2x separate APIs for interacting with files,
and several common object classes used in return values etc.

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

// Common Objects
fs.Dir                           // a directory
fs.Dirent                        // a file/directory inside a parent dir
fs.Stats                         // size, filetype info, last modified, permissions
fs.ReadStream / fs.WriteStream   // stream io
fs.FSWatcher / fs.StatWatcher    // fs.watch()/fs.watchFile watch a file

promise api

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

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

// I don't believe these functions have return values enabling them to be chained in .then()

callback api

opening files

the file open modes are provided using the flag key in the options hash.

/* a: append
 * w: write/replace
 * r: read
 *
 * appending '+' to any mode means read/write (ex: w+,r+,a+)
 */
const fs = require('fs');
fs.writeFileSync('/var/tmp/foo.txt', 'content', { flag: 'a' })
const fs = require('fs');
const pfs = require('fs/promises');
const contents = 'abc\ndef';

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

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

// promise-based
pfs.