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

El método fs.readFile() 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 readFile() se usa para leer de forma asincrónica todo el contenido de un archivo y devuelve la forma de búfer de los datos.

El método fs.readFile() se basa en la devolución de llamada. El uso del método 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 siempre nos gusta trabajar con un método basado en promesas. Usando algunos métodos adicionales de node.js, podemos operar un método basado en devolución de llamada de manera prometedora.

Sintaxis:

fs.readFile(path, options)

Nota: No se requiere devolución de llamada ya que operamos el método con promesas.

Parámetros: Este método acepta dos parámetros como se mencionó anteriormente y se describe a continuación:

  • ruta: Es un String, Buffer o URL que especifica la ruta al archivo cuyo contenido intentamos leer.
  • 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: es una string que especifica la técnica de codificación, el valor predeterminado es nulo.
    • bandera: Es una string que especifica las banderas del sistema de archivos. Su valor predeterminado es ‘r’.

Enfoque: el método fs.readFile() 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: Nombre de archivo: index.js

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to
// promise based methods
const readFileContent = util.promisify(fs.readFile)
  
// The readFileContent() method reads the file
// and returns buffer form of the data 
readFileContent('./testFile.txt')
// If promise resolved and datas are read 
.then(buff => {
  const contents = buff.toString()
  console.log(`\nContents of the file :\n${contents}`)
})
  
// If promise get rejected
.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 readFileContent = util.promisify(fs.readFile)
  
const fetchFile = async (path) => {
    
  // The readFileContent() method reads the file
  // and returns buffer form of the data 
  const buff = await readFileContent(path)
    
  const contents = buff.toString()
  console.log(`\nContents of the file :\n${contents}`)
}
   
fetchFile('./testFile.txt')
  
// If promise get rejected
.catch(err => {
   console.log(`Error Occurs, Error code -> ${err.code}, 
   Error NO -> ${err.errno}`);
});

Ejecute el archivo index.js con el siguiente comando:

node index.js

Producción:

Ejemplo 2: si la ruta dada al archivo no existe.
Nombre de archivo: index.js

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to 
// promise based methods
const readFileContent = util.promisify(fs.readFile)
  
// The readFileContent() method reads the file
// and returns buffer form of the data 
readFileContent('./false/path.txt')
// If promise resolved and datas are read 
.then(buff => {
  const contents = buff.toString()
  console.log(`\nContents of the file :\n${contents}`)
})
  
// If promise get rejected
.catch(err => {
  console.log(`\nError 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 readFileContent = util.promisify(fs.readFile)
  
const fetchFile = async (path) => {
    
  // The readFileContent() method reads the file
  // and returns buffer form of the data 
  const buff = await readFileContent(path)
    
  const contents = buff.toString()
  console.log(`\nContents of the file :\n${contents}`)
}
   
fetchFile('./false/path')
  
// If promise get rejected
.catch(err => {
  console.log(`\nError Occurs, Error code -> ${err.code}, 
  Error NO -> ${err.errno}`);
});

Ejecute el archivo index.js con el siguiente comando:

node index.js

Producción:

Explicación: el método fs.readFile() lee el contenido del archivo y, por lo tanto, esperaba una ruta al archivo existente. Dado que la ruta de acceso proporcionada al archivo no existe, se produce un error con el código de error ‘ENOENT’ y el número de error ‘-4058’. El error ‘ENOENT’ ocurre cuando no existe un nombre de ruta especificado.

Ejemplo 3: cuando la ruta dada es la ruta a una carpeta, no a un archivo.
Nombre de archivo: index.js

// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
  
// Convert callback based methods to 
// promise based methods
const readFileContent = util.promisify(fs.readFile)
  
// The readFileContent() method reads the file
// and returns buffer form of the data 
readFileContent('./testFolder')
// If promise resolved and datas are read 
.then(buff => {
  const contents = buff.toString()
  console.log(`\nContents of the file :\n${contents}`)
})
  
// If promise get rejected
.catch(err => {
  console.log(`\nError 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 readFileContent = util.promisify(fs.readFile)
  
const fetchFile = async (path) => {
    
  // The readFileContent() method reads the file
  // and returns buffer form of the data 
  const buff = await readFileContent(path)
    
  const contents = buff.toString()
  console.log(`\nContents of the file :\n${contents}`)
}
   
fetchFile('./testFolder')
  
// If promise get rejected
.catch(err => {
  console.log(`\nError Occurs, Error code -> ${err.code}, 
  Error NO -> ${err.errno}`);
});

Ejecute el archivo index.js con el siguiente comando:

node index.js

Producción:

Explicación: el método fs.readFile() lee el contenido del archivo y, por lo tanto, esperaba la ruta a un archivo. Dado que la ruta proporcionada es una ruta a una carpeta, se produce un error con el código de error ‘EISDIR’ y el número de error ‘-4068’. El error ‘EISDIR’ ocurre cuando una operación esperaba un archivo, pero se proporciona el nombre de la ruta del directorio.

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 *