Revista Tecnología

Manipulando Archivos con Node JS 10

Publicado el 21 agosto 2018 por Juan Ricardo Castro Lurita @pepoflex

Con Node JS podemos manipular archivos de manera sencilla, ya sea subir, editar, eliminar, crear, etc. un archivo en el servidor, por otro lado tambien puedes manipular las rutas de los archivos, copiar archivos, obtener una respuesta cuando realices una determinada acción con un archivo en tu servidor, en este artículo te explicaremos las maneras de trabajar con archivos en Node JS.

Manipulando Archivos con Node JS 10

Introducción

Node JS nos proporciona un módulo para trabajar e interactuar con el sistema de archivos bajo las funciones estandar POSIX, para usar el podemos declarar la siguiente línea de código

const fs = require('fs');

En su mayoría las operaciones del sistema de archivos trabajan de manera síncrona y asíncrona.

Cuando el sistema trabaja de forma asíncrona coje la respuesta de finalización de un proceso como último argumento y este o varios argumentos varían según el método o proceso que hayas aplicado, pero siempre el primer argumento va estar reservado para una excepción.

Si dicha operación al trabajar con un archivo se completa con éxito, entonces el primer argumento reservado para una excepción sera decretado como NULL o undefined, podemos ver lo explicado en el siguiente código para eliminar un archivo

const fs = require('fs');

fs.unlink('/tmp/tortadechocolate', (err) => {
  if (err) throw err;
  console.log('Postre Eliminado Satisfactoriamente /tmp/tortadechocolate');
})

Para los excepciones que se producen al gestionar archivos de manera síncrona se imprimen inmediatamente y se pueden manipular con try{} y catch() o puedes imprimirlas sin manipularse con try{} y catch() veamos el ejemplo a continuación

const fs = require('fs');

try {
  fs.unlinkSync('/tmp/tortadechocolate');
  console.log('successfully deleted /tmp/tortadechocolate');
} catch (err) {
  // Acá puedes manipular el error y decidir que hacer con el
}

Nota: Con la función fs.unlink puedes borrar un archivo del servidor y con unlinkSync lo mismo pero de manera síncrona.

Si trabajas con archivos de manera asíncrona puede que una petición no se realice correctamente y puede que otra acción se ejecute antes de la primera acción que debía realizarse, por ejemplo cambiaremos el nombre de un archivo con la función fs.rename() y luego le pasamos la función fs.stat() para saber el estado del archivo que estamos intentando cambiarle el nombre y si no realiza el cambio de nombre se pasará a ejecutar la segunda función con fs.stat()

fs.rename('/tmp/tortadchoc', '/tmp/tortadechocolate', (err) => {
  if (err) throw err;
  console.log('Nombre Editado Satisfactoriamente');
});
fs.stat('/tmp/tortadechocolate', (err, stats) => {
  if (err) throw err;
  console.log(`stats: ${JSON.stringify(stats)}`);
});

Puedes ordenar las operaciones colocando la función fs.stat() en la respuesta que se obtiene luego de ejecutar la función fs.rename() y mostrar el estado del archivo en formato JSON

fs.rename('/tmp/tortadchoc', '/tmp/tortadechocolate', (err) => {
  if (err) throw err;
  fs.stat('/tmp/tortadechocolate', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});

Rutas de Archivos

Node JS nos permite trabajar con rutas absolutas y rutas relativas, para rutas absolutas pode colocar la ruta en nuestro código y Node JS se encargará de interpretarlas via POSIX

const fs = require('fs');

fs.open('/productos/stock/tortas/tortasdechocolate.xls', 'r', (err, fd) => {
  if (err) throw err;
  fs.close(fd, (err) => {
    if (err) throw err;
  });
});

Así mismo podemos utilizar una ruta relativa de un archivo via POSIX

fs.open('tortasdechocolate.xls', 'r', (err, fd) => {
  if (err) throw err;
  fs.close(fd, (err) => {
    if (err) throw err;
  });
});

Hay versiones de sistemas operativos que tratan las rutas de los archivos como secuencias de bytes opacas, para ellos puedes usar el módulo Buffer para normalizarla, se puede aplicar a rutas relativas  o absolutas

fs.open(Buffer.from('/productos/stock/tortas/tortasdechocolate.xlsx'), 'r', (err, fd) => {
  if (err) throw err;
  fs.close(fd, (err) => {
    if (err) throw err;
  });
});

Soporte para Rutas de tipo URL

Node JS nos permite pasar archivos como objeto URL WHATWG y solo admite objetos que usen el protocolo file:

const fs = require('fs');
const fileUrl = new URL('file:///tmp/tortadechocolate');

fs.readFileSync(fileUrl);

En su mayoría las rutas URL de archivos con file: son siempre rutas absolutas-

Operaciones con Archivos

En Node JS podemos crear, leer, actualizar, eliminar y renombrar archivos de manera sencilla, veamos a continuación

Crear Archivo

Podemos crear un archivo en el servidor de manera sencilla con la función fs.appendFile() , si el archivo existe este es reemplazado por el nuevo archivo creado.

fs.appendFile('tortasdechocolate.xls', 'tortas', (err) => {
  if (err) throw err;
  console.log('Archivo Creado Satisfactoriamente');
});

Puedes especificarle el tipo de codificación del archivo

fs.appendFile('tortasdechocolate.xls', 'tortas', 'utf8', callback

Leer Archivo

Para leer un archivo en Node JS puedes usar la función fs.readFile(), por ejemplo queremos leer los datos de un archivo excel asincrónicamente

fs.readFile('/productos/stock/tortas/tortasdechocolate.xls', (err, data) => {
  if (err) throw err;
  console.log(data);
});

Si no le indicas el tipo de codificación, entonces obtendrás el buffer de datos en bruto

fs.readFile('/productos/stock/tortas/tortasdechocolate.xls', 'utf8', callback);

Actualizar Archivo

Podemos actualizar el contenido de un archivo con la función fs.writeFile() , también puedes usar fs.appendFile() según lo que creas te sea conveniente, primero le indicamos que archivo es el que debe actualizar y luego le pasamos el contenido que va a actualizar en el archivo

fs.writeFile('tortasdechocolate.xls', 'Stock: Agotado', (err) => {
  if (err) throw err;
  console.log('Archivo actualizado Satisfactoriamente');
});

Eliminar Archivo

Para borrar un archivo en el servidor usaremos la función fs.unlink() , solamente le indicamos el nombre del archivo que debe eliminar del servidor

fs.unlink('tortas/tortadechocolate.xls', (err) => {
  if (err) throw err;
  console.log('Archivo Eliminado Satisfactoriamente');
});

Renombrar Archivo

Puedes cambiarle el nombre a un archivo que se encuentre en tu servidor con la función fs.rename(), debes indicarle primero el nombre del archivo que quieres renombrar y luego pasarle el nuevo nombre del archivo que va a tener

fs.rename('/tortas/tortasdechoc.xls', '/tortas/tortasdechocolate.xls', (err) => {
  if (err) throw err;
  console.log('renamed complete');
});

Si busca hacer otras operaciones con archivos, puedes revisar la documentación oficial de Node JS 10.

Manipulando Archivos con Node JS 10

imagen: tecnonucleous.com

Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.


Volver a la Portada de Logo Paperblog