Skip to content

Writing files with Node.js

Writing a file

The easiest way to write to files in Node.js is to use the fs.writeFile() API.

javascript
const fs = require('node:fs')
const content = 'Some content!'

fs.writeFile('/Users/joe/test.txt', content, err => {
  if (err) {
    console.error(err)
  } else {
    // file written successfully
  }
})

Writing a file synchronously

Alternatively, you can use the synchronous version fs.writeFileSync:

javascript
const fs = require('node:fs')
const content = 'Some content!'

try {
  fs.writeFileSync('/Users/joe/test.txt', content)
} catch (err) {
  console.error(err)
}

You can also use the promise-based fsPromises.writeFile() method offered by the fs/promises module:

javascript
const fs = require('node:fs/promises')
async function example() {
  try {
    const content = 'Some content!'
    await fs.writeFile('/Users/joe/test.txt', content)
  } catch (err) {
    console.log(err)
  }
}

example()

By default, this API will replace the contents of the file if it does already exist.

You can modify the default by specifying a flag:

javascript
fs.writeFile('/Users/joe/test.txt', content, { flag: 'a+' }, err => [])

The flags you'll likely use are:

FlagDescriptionFile gets created if it doesn't exist
r+This flag opens the file for reading and writing
w+This flag opens the file for reading and writing and it also positions the stream at the beginning of the file
aThis flag opens the file for writing and it also positions the stream at the end of the file
a+This stream opens the file for reading and writing and it also positions the stream at the end of the file

You can find more information about the flags in the fs documentation.

Appending content to a file

Appending to files is handy when you don't want to overwrite a file with new content, but rather add to it.

Examples

A handy method to append content to the end of a file is fs.appendFile() (and its fs.appendFileSync() counterpart):

javascript
const fs = require('node:fs')
const content = 'Some content!'

fs.appendFile('file_log', content, err => {
  if (err) {
    console.error(err)
  } else {
    // done!
  }
})

Example with Promises

Here's a fsPromises.appendFile() example:

javascript
const fs = require('node:fs/promises')
async function example() {
  try {
    const content = 'Some content!'
    await fs.appendFile('/Users/joe/test.txt', content)
  } catch (err) {
    console.log(err)
  }
}

example()