El método fs.opendir() 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 utilizado para abrir asincrónicamente un directorio.
El método fs.opendir() 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 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. La promesa se resuelve con el objeto ‘fs.Dir’, el objeto en sí contiene otras funciones para acceder y cerrar el directorio. En caso de que se rechace la promesa, se rechazará con un objeto de error.
Sintaxis:
fs.opendir(path, options)
Nota: no se requiere devolución de llamada ya que operamos el método con promesas.
Parámetros: acepta dos rutas de parámetros y opciones como se mencionó anteriormente. Las opciones es un parámetro opcional.
- ruta: Es un String, Buffer o Url que especifica la ruta al directorio que tiene que estar abierto.
- opciones: es un parámetro opcional que afecta la salida de alguna manera según se proporcione o no a la llamada de función.
- codificación: especifica la técnica de codificación, por defecto es ‘UTF8’
- bufferSize: es un número que especifica la cantidad de entradas de directorio que se almacenan en el búfer internamente cuando se lee desde el directorio. Un valor alto de bufferSize garantiza un buen rendimiento pero conduce a más usos de memoria.
Devoluciones: si el método opera con promesas, devuelve una promesa resuelta con el objeto ‘fs.Dir’, el objeto en sí contiene otras funciones para acceder y cerrar el directorio. En caso de que se rechace la promesa, se rechazará con un objeto de error.
métodos de objeto ‘dir’:
- dir.close(): cierra de forma asíncrona los recursos del directorio y, por lo tanto, el intento posterior de leer dará como resultado errores. Se devuelve una Promesa que se resolverá una vez cerrado el recurso.
- dir.closeSync() : cierra sincrónicamente los recursos del directorio y, por lo tanto, el intento posterior de leer dará como resultado errores.
- dir.path : Devuelve la ruta al directorio.
- dir.read() : lee de forma asíncrona la siguiente entrada del directorio. Una vez completada la lectura, se devuelve una Promesa que se resolverá con un fs.Dirent, o nulo si no hay más directorios leídos.
Enfoque: método fs.opendir() basado en 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
javascript
// Importing File System and Utilities module const fs = require('fs') const util = require('util') // Convert callback based methods // to promise based methods const openDir = util.promisify(fs.opendir) openDir('./testDirectory') .then(dir => { console.log('Directory is opened') // Path to the directory console.log(`Path to the directory: ${dir.path}`) // Closing directory return dir.close() }) .then(() => { console.log('Directory closed') console.log('\nFurther attempt to' + ' read sub-directories:\n') // Further attempt to access the // directory results in error return dir.read() }) .then(dirent => { // Does not execute since directory // is closed catch block runs instead console.log(dirent) }) .catch(err => { console.log('Error, Something went wrong!') })
Implementando la misma funcionalidad usando async-await.
javascript
// Importing File System and // Utilities module const fs = require('fs') const util = require('util') // Convert callback based methods // to promise based methods const openDir = util.promisify(fs.opendir) const fetchDirectory = async (path) => { // Opeaning directory const dir = await openDir(path) console.log('Directory is opened') // Path to the directory console.log(`Path to the directory: ${dir.path}`) // Closing directory await dir.close() console.log('Directory closed') console.log('\nFurther attempt to ' + 'read sub-directories:\n') // Further attempt to access the directory // results in error does not execute since // directory is closed catch block runs // instead const subDir = await dir.read() console.log(subDir) } fetchDirectoey('./testDirectory') .catch(err => { console.log('Error, Something went wrong!') })
Ejecute el archivo index.js con el siguiente comando:
node index.js
Producción:
Directory is opened Path to the directory: testDirectory Directory closed Further attempt to read sub-directories: Error, Something went wrong!
Ejemplo 2: Nombre de archivo index.js
javascript
// Importing File System and Utilities module const fs = require('fs') const util = require('util') // Convert callback based methods to // promise based methods const openDir = util.promisify(fs.opendir) openDir('./testDirectory') .then(dir => { console.log('Directory is opened') // Path to the directory console.log(`Path to the directory: ${dir.path}`) // Reading sub-directories or files console.log('\nReading sub-directories:\n') return dir.read() }) .then(dirent => { console.log(`Sub-Directory : ${dirent.name}`) // Reading further sub directories return dir.read() }) .then(dirent => { console.log(`Sub-Directory : ${dirent.name}`) return dir.read() }) .then(dirent => { console.log(`Sub-Directory : ${dirent.name}`) return dir.read() }) .then(dirent => { console.log(`Sub-Directory : ${dirent.name}`) return dir.read() }) .then(dirent => { console.log(`Sub-Directory : ${dirent.name}`) return dir.read() }) .catch(err => { console.log('Error, Something went wrong!') })
Implementando la misma funcionalidad usando async-await.
javascript
// Importing File System and Utilities module const fs = require('fs') const util = require('util') // Convert callback based methods // to promise based methods const openDir = util.promisify(fs.opendir) const fetchDirectory = async (path) => { // Opeaning directory const dir = await openDir(path) console.log('Directory is opened') // Path to the directory console.log(`Path to the directory: ${dir.path}`) // Reading sub-directories or files console.log('\nReading sub-directories:\n') const subDir1 = await dir.read() const subDir2 = await dir.read() const subDir3 = await dir.read() const subDir4 = await dir.read() const subDir5 = await dir.read() // Printing console.log(`Sub-Directory : ${subDir1.name}`) console.log(`Sub-Directory : ${subDir2.name}`) console.log(`Sub-Directory : ${subDir3.name}`) console.log(`Sub-Directory : ${subDir4.name}`) console.log(`Sub-Directory : ${subDir5.name}`) } fetchDirectory('./testDirectory') .catch(err => { console.log('Error, Something went wrong!') })
Ejecute el archivo index.js con el siguiente comando:
node index.js
Producción:
Directory is opened Path to the directory: testDirectory Reading sub-directories: Sub-Directory : testFile1.txt Sub-Directory : testFile2.txt Sub-Directory : teasrFile3.txt Sub-Directory : testFile4.txt Sub-Directory : null
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