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

El método fs.rename() 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 rename() se usa para cambiar el nombre del archivo en la ruta anterior dada a una ruta nueva dada. Si el nuevo archivo de ruta ya existe, se sobrescribirá y si existe un directorio en la nueva ruta, se producirá un error.

El método fs.rename() 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 siempre nos gusta trabajar con el 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.rename(oldPath, newPath)

Nota: No se requiere devolución de llamada si 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:

  • oldpath: Es un String, Buffer o URL que especifica la ruta al archivo que se tiene que renombrar.
  • newpath: es una string, búfer o URL que especifica la ruta al archivo desde el cual se reemplazará el archivo antiguo.

Enfoque: el método fs.rename() 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 readDir = util.promisify(fs.readdir)
const rename = util.promisify(fs.rename)
   
readDir(process.cwd())
.then(files => {
  console.log(`Contents before rename operation: `)
       
  // Contents of the current directory
  for(let file of files) {
      console.log(file)
  }
   
  console.log('\nAttempt to rename file : \n')
    
  // Rename operation
  return rename('test.txt', 'testFile.txt')
})
   
.then(() => {
  
  // The process.cwd() gives current working
  // directory
  return readDir(process.cwd())
})
   
.then(files => {
  console.log(`Contents after rename operation: `)
    
  // Contents of the current directory
  for(let file of files) {
    console.log(file)
  }
})
  
.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 readDir = util.promisify(fs.readdir)
const rename = util.promisify(fs.rename)
   
const renameOperation = async (oldpath, newpath) => {
  console.log(`Contents before rename operation: `)
     
  // Fetching contents of the directory before
  // rename operation. The process.cwd() gives
  // current working directory
  const oldFiles = await 
      fs.promises.readdir(process.cwd())
   
  // Contents of the current working directory
  for(let file of oldFiles){
    console.log(file)
  }
   
  console.log('\nAttempt to rename file : \n')
   
  // Rename operation
  await fs.promises.rename(oldpath, newpath)
  console.log(`Contents after rename operation: `)
     
  // Fetching contents of directory before
  // rename operation
  const newFiles = await 
      fs.promises.readdir(process.cwd())
    
  // Contents of the current working directory
  for(let file of newFiles) {
    console.log(file)
  }
}
   
renameOperation('test.txt', 'testFile.txt')
.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

La estructura de directorios antes de ejecutar el programa:

La estructura del directorio después de ejecutar el programa:

Producción:

Ejemplo 2: cuando se da newpath no es la ruta a un archivo sino un directorio.
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 readDir = util.promisify(fs.readdir)
const rename = util.promisify(fs.rename)
   
readDir(process.cwd())
.then(files => {
  console.log(`Contents before rename operation: `)
       
  // Contents of the current directory
  for(let file of files) {
    console.log(file)
  }
   
  console.log('\nAttempt to rename file : \n')
    
  // Rename operation
  return rename('testFile.txt', 'test')
})
   
.then(() => {
  
  // The process.cwd() gives current 
  // working directory
  return readDir(process.cwd())
})
   
.then(files => {
  console.log(`Contents after rename operation: `)
    
  // Contents of the current directory
  for(let file of files) {
    console.log(file)
  }
})
  
.catch(err => {
   console.log(`Error occurs, 
   Error code -> ${err.code}, 
   Error No -> ${err.errno}`);
})

Implementando la misma funcionalidad con 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 readDir = util.promisify(fs.readdir)
const rename = util.promisify(fs.rename)
  
   
const renameOperation = async (oldpath, newpath) => {
  console.log(`Contents before rename operation: `)
     
  // Fetching contents of directory before 
  // rename operation. The process.cwd() 
  // gives current working directory
  const oldFiles = await readDir(process.cwd())
   
  // Contents of the current working directory
  for(let file of oldFiles) {
    console.log(file)
  }
   
  console.log('\nAttempt to rename file : \n')
    
  // Rename operation
  await rename(oldpath, newpath)
    
  console.log(`Contents after rename operation: `)
     
  // Fetching contents of directory before rename operation
  const newFiles = await readDir(process.cwd())
    
  // Contents of the current working directory
  for(let file of newFiles) {
    console.log(file)
  }
}
   
renameOperation('testFile.txt', 'test')
.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:

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 *