¿Cómo operar el método fs.appendFile() basado en devolución de llamada con promesas en Node.js?

El método fs.appendFile() se define en el módulo Sistema de archivos de Node.js. El módulo del Sistema de Archivos es básicamente para interactuar con el disco duro de la computadora del usuario. El método appendFile() se usa para agregar nuevos datos en el archivo existente o, si el archivo no existe, primero se crea el archivo y luego se le agregan los datos proporcionados.

El método fs.appendFile() se basa en la devolución de llamada. El uso de métodos de devolución de llamada genera una gran posibilidad de anidamiento de devolución de llamada o problemas infernales de devolución de llamada. Por lo tanto, para evitarlo, casi nos gusta trabajar con un método basado en promesas. Usando algún método adicional de node.js, podemos operar un método basado en devolución de llamada de manera prometedora.

Sintaxis:

fs.appendFile(path, data, options)

Parámetro:

  • ruta: es una string, búfer o URL que especifica la ruta al archivo de destino en el que se agregarán los datos dados.
  • datos: es una string o un búfer que se agregará al archivo de destino.
  • opciones: es un parámetro opcional que afecta la salida de alguna manera según lo proporcionemos a la llamada de función o no.
    • codificación: Especifica la técnica de codificación, por defecto es ‘UTF8’.
    • mode: Especifica el modo del archivo. Los modos de archivo nos permiten crear, leer, escribir o modificar un archivo. El valor predeterminado es ‘0o666’.
    • bandera: especifica la bandera utilizada al agregar al archivo. El valor predeterminado es ‘a’.

Enfoque: el método fs.appendFile() basado en la devolución de llamada. Para operarlo con promesas, primero, usamos el método promisify() definido en el módulo de utilidades para convertirlo en un método basado en promesas.

Ejemplo 1:

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to
// promise based methods
const appendContent = util.promisify(fs.appendFile)
const readFileContent = util.promisify(fs.readFile)
   
  
// The readFileContent() method reads the
// file and returns buffer form of the data 
readFileContent('./testFile.txt')
.then(buff => {
  
    // File content before append 
    const oldContent = buff.toString()
    console.log(`\nBefore Append: ${oldContent}\n`)
   
    // Append operation
    return appendContent('./testFile.txt', 
            '\nHey, I am newly added..!!')
})
   
.then(() => {
  
    // Getting new file content
    return readFileContent('./testFile.txt')
})
     
.then(buff => {
  
    // File content after append 
    const newContent = buff.toString()
    console.log(`After Append: ${newContent}\n`)
})
     
.catch(err => {
  console.log(`Error Occurs, 
    Error code -> ${err.code}, 
    Error NO -> ${err.errno}`)
})

Implementando la misma funcionalidad usando async-await.

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to
// promise based methods
const appendContent = util.promisify(fs.appendFile)
const readFileContent = util.promisify(fs.readFile)
   
const appendDataToFile = async (path, data) => {
   
  // The readFileContent() method reads the file
  // and returns buffer form of the data 
  const oldBuffer = await readFileContent(path)
   
  // File content before append 
  const oldContent = oldBuffer.toString()
   
  // Append operation
  await appendContent(path, data)
   
  const newBuffer = await readFileContent(path)
   
  // File content after append 
  const newContent = newBuffer.toString()
   
  console.log(`\nBefore Append: ${oldContent}\n`)
  console.log(`After Append: ${newContent}`)
}
   
appendDataToFile('./testFile.txt', 
    '\nHey, I am newly added..!!')
.catch(err => {
  console.log(`Error Occurs, 
    Error code -> ${err.code}, 
    Error NO -> ${err.errno}`)
})
})

Producción:

Ejemplo 2: cuando no existe una ruta dada al nombre del archivo.

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to 
// promise based methods
const appendContent = util.promisify(fs.appendFile)
const readFileContent = util.promisify(fs.readFile)
  
// Append operation if given file does not exist
// it will be created first then data is appended
appendContent('./testFile.txt', 
    'Please add me to the test file..!!')
.then(() => {
  
    // readFileContent() method reads the file
    // and returns buffer form of the data 
    return readFileContent('./testFile.txt')
})
   
.then(buff => {
  
    // Appended data
    const content = buff.toString()
    console.log(`\nContent : ${content}`)
})
   
.catch(err => {
  console.log(`Error Occurs, 
    Error code -> ${err.code}, 
    Error NO -> ${err.errno}`)
})

Implementando la misma funcionalidad que async-await.

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to 
// promise based methods
const appendContent = util.promisify(fs.appendFile)
const readFileContent = util.promisify(fs.readFile)
  
const appendDataToFile = async (path, data) => {
  
  // Append operation if given file does not exist
  // it will created first then data is appended
  await appendContent(path, data)
   
  // readFile() method reads the file
  // and returns buffer form of the data 
  const buff = await readFileContent(path)
   
  // File content after append 
  const content = buff.toString()
  console.log(`\nContent : ${content}`)
}
   
appendDataToFile('./testFile.txt', 
    'Please add me to the test file..!!')
  
.catch(err => {
  console.log(`Error Occurs, 
    Error code -> ${err.code}, 
    Error NO -> ${err.errno}`)
})

Estructura del directorio antes de ejecutar el programa:

Estructura del directorio después de ejecutar el programa:

Producción:

Publicación traducida automáticamente

Artículo escrito por hunter__js y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *