Dependencias útiles de NodeJS
Librerías más usadas en el entorno NodeJS
NODEMON
Nodemon permite recargar la página cada vez que detecta un cambio en el editor sin necesidad de inicializar continuamente el proyecto. Esta herramienta es realmente útil y eficaz en la etapa de desarrollo, por esta razón, es recomendable instalarla indicando el parámetro -dev para que NPM la instale en la sección de desarrollo.
INSTALAR NODEMON
npm install nodemon -dev
Una vez instalada se puede inicializar el proyecto con el comando nodemon desde un archivo específico o añadirla como tarea en la sección scripts del archivo package.json. Para verlo mejor a continuación se muestra un ejemplo de cada caso.
Ejemplo de inicialización con nodemon
nodemon app.js
Ejemplo de inicialización como tarea
{
"name": "proyecto_prueba",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon app.js"
},
"author": "",
"license": "MIT"
}
npm start
Nodemon, por defecto, solamente detecta los cambios de los archivos js y json pero permite detectar cambios en otra clase de archivos, mediante la configuración del archivo package.json, indicando la extensión a detectar. Manteniendo el ejemplo anterior, se modifica el script de nodemon añadiendo la extensión hbs que hace referencia al motor de plantillas handlebars.
{
"name": "proyecto_prueba",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon -e hbs app.js"
},
"author": "",
"license": "MIT"
}
HTTP
Dispone de los métodos necesarios para realizar la conexión a internet y viene ya predefinido en la instalación de NodeJS. A continuación un ejemplo de la creación de un servidor muy básico pero suficiente para mostrar la sencillez con la que se puede crear un servidor utilizando esta librería.
var http = require("http");
var servidor = http.createServer(function(){
console.log("Existe petición");
})
servidor.listen(3389);
console.log("Iniciando servidor");
Este código permite que al iniciar el servidor devuelva la cadena "Iniciando servidor" y que al realizar una petición desde un navegador al puerto indicado (3389) devuelva la cadena "Existe petición". En los dos casos el resultado lo devuelve por terminal. Para poder visualizar un resultado por el navegador es necesario ampliar el anterior código añadiendo los métodos writeHead para el encabezado y write o end para mostrar el resultado en pantalla como muestra en el código que sigue a continuación.
var http = require("http");
var servidor = http.createServer(function(req,res){
res.writeHead(200,{ "Content-Type":"text/html"});
res.write("Resultado" + req.url );
console.log("Existe petición");
})
servidor.listen(3389);
console.log("Iniciando servidor");
HTTP-ERRORS
Esta librería permite configurar los posibles errores de peticiones http automáticamente.
COOKIE-PARSER
Permite analizar y cachear todas las cookies requeridas
EXPRESS-SESSION
Manejo de sesiones
MORGAN
Permite monitorear las peticiones de la aplicación
PLANTILLAS HANDLEBARS
NODE-SASS-MIDDLEWARE
SERVE-FAVICON
BABELIFY-EXPRESS
Une Babel con Browserify para poder importar módulos en la parte del front.
EXPRESS-GENERATOR
Esta librería además de instalar Express permite crear el andamiaje necesario (scaffolding) de un proyecto en NodeJS solamente con un comando. Para crear un proyecto con esta librería partiendo desde cero, es necesario instalarla de forma global, para así disponer de ella desde cualquier carpeta del sistema.
Instalación de Express-Generator de forma global
npm install express-generator -g
En caso de error de permisos, al realizar una instalación de forma global, es necesario crear un nuevo directorio, por ejemplo, .npm-global y registrarlo en la configuración de NPM tal como muestran las siguientes líneas de código.
mkdir ~/.npm-global
npm config SET PREFIX '~./npm-global'
Esta configuración debe solucionar el error y permitir instalar la librería.
Registrar Express-Generator
El siguiente paso es añadir el subdirectorio bin del directorio creado y añadirlo a la variable de entorno $PATH para poder disponer de la librería desde cualquier lugar del sistema.
Introduciendo la siguiente línea de código es posible disponer de Express-generator desde cualquier directorio del sistema, sin embargo, en cada reinicio o al cerrar y abrir la terminal es necesario volver a realizar la misma operación.
export PATH=~/.npm-global/bin:$PATH
Para disponer de Express-Generator de forma permanente es necesario editar el documento ~/.profile (o crearlo si no existe) con algún editor de texto e incluirlo al final del archivo.
Se edita el archivo .profile
sudo gedit ~/.profile
Se añade el directorio a la variable de entorno $PATH
export PATH=~/.npm-global/bin:$PATH
CREAR PROYECTO EXPRESS-GENERATOR
Para crear un proyecto con Express-Generator tan solo es necesario introducir la palabra express seguido de las opciones a incluir y por último el nombre del proyecto.
express miProyecto
MOSTRAR OPCIONES
Las opciones permiten configurar el proyecto para un sistema de plantillas, de estilos, git...
express -h
El paquete de plantillas jade que Express-Generator incorpora por defecto está obsoleto, es recomendable añadir el sistema pug o algún otro sistema de plantillas.
express --view=pug miProyecto
Al finalizar la creación del proyecto, la terminal muestra las indicaciones necesarias para iniciar el servidor.
change directory:
$ cd miProyecto
install dependencies:
$ npm install
run the app:
$ DEBUG=miproyecto:* npm start
Al iniciar el servidor, la terminal vuelve a mostrar información especificando el puerto, por el cual, el servidor está escuchando. Ya solamente es necesario acceder con el puerto indicado desde el navegador y comprobar que todo funciona correctamente.
FS
FileSystem permite acceder al sistema de archivos y realizar acciones como copiar, mover, eliminar... No es necesario instalar FS, ya que, al igual que http, ya viene incluido en NodeJS. A continuación se muestran distintos ejemplos con algunos de los métodos más utilizados de esta librería.
Leer archivos
var fs = require("fs");
var read = fs.readFileSync("./archivo.txt", "utf8");
console.log(read);
Mediante el método readFileSync la lectura de archivos se realiza mediante un proceso llamado blocking, esto quiere decir que puede detener o retrasar la ejecución del resto del código mientras el archivo es totalmente leído por el sistema. Para que esto no ocurra y el proceso de lectura se realice de forma asíncrona es necesario realizar la lectura mediante el método readFile, este proceso es denominado non-blocking. A continuación un ejemplo de este método añadiendo además un condicional que permite mostrar un mensaje en caso de error.
var fs = require("fs");
var read = fs.readFile("./archivo.txt", "utf8", function(error,data){
if(error){
console.log("error al leer el archivo");
throw error;
}else{
console.log(data);
}
});
Leer directorios
El método readdir permite mostrar el contenido de una carpeta con el código siguiente.
var fs = require("fs");
fs.readdir("./directorio", (error, data) => {
console.log(data);
})
Este método permite añadir parámetros opcionales y ampliar la información del contenido de la carpeta. A continuación el mismo ejemplo anterior pero se establece la propiedad withFileTypes, esta opción devuelve información que permite distinguir mediante valores numéricos cual es archivo y cual directorio. Si devuelve 1 es un archivo, en cambio si devuelve 2 es un directorio.
var fs = require("fs");
fs.readdir("./directorio",{withFileTypes:true}, (error, data) => {
console.log(data);
})
Escribir archivos
El método writeFile permite escribir contenido en un archivo y en caso de no existir el archivo automáticamente lo crea en la ruta especificada.
var fs = require("fs");
fs.writeFile("./archivos/texto.txt", "nuevo archivo", (error) => {
if(error){
console.log("error de escritura");
}else{
console.log("OK");
}
})
Si en lugar de escribir datos a un archivo se requiere añadir datos a un archivo ya existente que ya contiene datos, fs dispone del método appendFile que agrega el nuevo contenido a continuación del anterior.
var fs = require("fs");
fs.appendFile("./archivos/texto.txt", " agregando datos al archivo", (error) => {
if(error){
console.log("error de escritura");
}else{
console.log("OK");
}
})
Copiar archivos
La copia de archivos se realiza mediante el método copyFile y de igual forma que los métodos anteriores se pasan los distintos parámetros. El primer parámetro indica la ruta del archivo original, el segundo parámetro indica la ruta y el nombre del nuevo archivo y el tercer parámetro indica la posibilidad de añadir una función callback que permite continuar realizando acciones una vez haya finalizado la copia del archivo.
var fs = require("fs");
fs.copyFile("./img/imagen.jpg", "./img/imagenNueva.jpg", (error) => {
if(error){
console.log("error en la copia de archivos");
throw error;
}else{
console.log("OK");
}
});
Eliminar archivos
Nodejs dispone de un método para eliminar archivos con el mismo nombre que PHP, el método unlink incluye dos parámetros, el primero, que es la ruta del archivo y el segundo, que es un callback que permite comprobar si existe algún error y continuar con el siguiente proceso.
var fs = require("fs");
fs.unlink("./img/imagen.jpg", (error) => {
if(error){
console.log("error eliminando el archivo");
throw error;
}else{
console.log("OK");
}
});
Es importante destacar que una vez eliminado un archivo con este método no existe posibilidad de recuperar el archivo.
Mover archivos
La librería fs no dispone de un método personalizado para poder mover archivos, pero si permite encadenar métodos de forma síncrona, por tanto, una fórmula posible para mover archivos consiste en copiar un archivo nuevo con el mismo nombre del original y eliminar el archivo original. El código siguiente contiene un ejemplo moviendo una imagen.
var fs = require("fs");
function copiar(ruta, rutaNueva, nombre){
fs.copyFile(ruta+ "/"+nombre,rutaNueva+"/"+nombre,(error) => {
if(error){
console.log(error);
}else{
eliminar(ruta,nombre);
}
})
}
function eliminar(ruta,nombre){
fs.unlink(ruta+"/"+nombre,(error)=> {
if(error){
console.log("error al eliminar");
}else{
console.log("OK");
}
})
}
copiar("./img","./","imagen.jpg");
De esta forma el método copiar copia el archivo a la ruta indicada y si este proceso de copia se realiza con éxito se encadena con el método eliminar que borra el archivo original dando como resultado final el movimiento de un archivo.
Los archivos json (Javascript Object Notation) son archivos de texto plano y de fácil lectura basados en Javascript. Se utilizan mayoritariamente para el intercambio de datos y están sustituyendo a los populares archivos XML, por ser más eficientes y legibles. A continuación un ejemplo de un archivo json muy básico.
usuario.json
{
"nombre": "Juan",
"edad": "50",
"correo":"juan@gmail.com"
}
IMPORTAR JSON
Para importar archivos de tipo json en un entorno NodeJS es necesario realizar la llamada al archivo con el comando require indicando la ruta del archivo, para después hacer uso de sus propiedades como si de un objeto se tratase.
index.js
var usuario = require("./usuario.json");
console.log(usuario.nombre);
console.log(usuario.correo);
LEER JSON
La lectura de archivos json desde NodeJS ser realiza de igual forma que cualquier otro archivo. Tal como está explicado en esta misma entrada (en el apartado de la librería fs), la lectura se realiza mediante el método readFile. Este método realiza la lectura del archivo obteniendo un conjunto de datos binarios que, para poder manejarlo como archivo json, es necesario aplicarle el método parse del objeto JSON y así acceder fácilmente al contenido del archivo.
index.js
var fs = require("fs");
fs.readFile("./usuario.json", (error,data) => {
console.log(JSON.parse(data));
- console.log(JSON.parse(data).nombre);
})
Para poder comentar es necesario iniciar sesión