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.
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
1 2 3 |
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
1 2 3 4 5 6 7 8 |
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
1 2 3 4 5 6 7 8 9 10 |
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()
1 2 3 4 5 6 7 8 9 10 |
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
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 9 10 |
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
1 2 3 4 5 6 7 8 |
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
1 2 3 4 5 6 7 8 |
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:
1 2 3 4 5 6 |
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.
1 2 3 4 5 6 |
fs.appendFile('tortasdechocolate.xls', 'tortas', (err) => { if (err) throw err; console.log('Archivo Creado Satisfactoriamente'); }); |
Puedes especificarle el tipo de codificación del archivo
1 2 3 |
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
1 2 3 4 5 6 |
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
1 2 3 |
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
1 2 3 4 5 6 |
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
1 2 3 4 5 6 |
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
1 2 3 4 5 6 |
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.
Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.