Nodejs filesystem: Difference between revisions

From wikinotes
Line 49: Line 49:
== opening files ==
== opening files ==
<blockquote>
<blockquote>
the file open modes are provided using the <code>flag</code> param.
the file open modes are provided using the <code>flag</code> key in the <code>options</code> hash.
<syntaxhighlight lang="yaml">
<syntaxhighlight lang="javascript">
a: append
/* a: append
w: write/replace
* w: write/replace
r: read
* r: read
 
*
# appending '+' to any mode means read/write
* appending '+' to any mode means read/write (ex: w+,r+,a+)
w+,r+,a+
*/
const fs = require('fs');
fs.writeFileSync('/var/tmp/foo.txt', 'content', { flag: 'a' })
</syntaxhighlight>
</syntaxhighlight>



Revision as of 18:05, 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.

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

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.