0% encontró este documento útil (0 votos)
11 vistas

Presentación_cursoNode

El documento es una introducción a Node.js, un entorno de ejecución de código abierto y asíncrono basado en el motor V8 de Google, utilizado para desarrollar aplicaciones del lado del cliente y del servidor. Se abordan aspectos fundamentales como la instalación, variables, tipos de datos, operadores, estructuras de control, funciones y asincronía, proporcionando ejemplos prácticos y ejercicios para facilitar el aprendizaje. Además, se destacan las ventajas de Node.js, incluyendo su escalabilidad, rendimiento y la fuerte comunidad de soporte.

Cargado por

josejuradoromero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
11 vistas

Presentación_cursoNode

El documento es una introducción a Node.js, un entorno de ejecución de código abierto y asíncrono basado en el motor V8 de Google, utilizado para desarrollar aplicaciones del lado del cliente y del servidor. Se abordan aspectos fundamentales como la instalación, variables, tipos de datos, operadores, estructuras de control, funciones y asincronía, proporcionando ejemplos prácticos y ejercicios para facilitar el aprendizaje. Además, se destacan las ventajas de Node.js, incluyendo su escalabilidad, rendimiento y la fuerte comunidad de soporte.

Cargado por

josejuradoromero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 74

Introducción a Node.

Js

Beatriz Clemente Ramos

Septiembre 2024
Índice.

1. Introducción. 9. Módulos.
2. Instalación. 10. Manejo de paquetes con npm.
3. Variables. 11. Creador de un servidor básico.
4. Tipos de datos. 12. API.
5. Operadores. 1. ¿Qué es?
6. Estructuras de control. 2. Características.
7. Funciones. 3. Peticiones.

8. Asincronía. 4. Códigos de respuesta.


1. Callback. 13. Creación de un servidor
2. Promesas. avanzado.
3. Async/Await. 14. Peticiones a una API externa.
Introducción

 Node.js es un entorno en tiempo de ejecución multiplataforma, de


código abierto.
 Es asíncrono, con E/S de datos en una arquitectura orientada a eventos,
sin bloqueos. Es decir, podemos decir que el servidor consta de un
subproceso que procesa un evento tras otro.
 Además está basado en el motor V8 de Google.
 Se utiliza para desarrollar toda clase de herramientas y aplicaciones
tanto para el cliente como para el servidor.
Introducción

Ventajas
 Escalable.
 Rendimiento y eficacia.
 Facilidad.
 Open Source.
 Comunidad y soporte
Instalación
 En primer lugar, vamos a asegurarnos que tengamos instalado Node.js en
nuestros sistemas. Para comprobar si lo tenemos instalado abrimos una
terminal, y escribimos el siguiente comando:
node –v

 Esto mostrará la versión que tenemos instalada e Node.js, lo que indica


que está configurado correctamente.
Instalación

 En caso de no tener instalado Node.js, vamos a hacerlo.


 En primer lugar, lo descargamos desde el sitio web oficial de Node.js
https://nodejs.org/. Descargaremos la versión que se ajuste a las
características de nuestro equipo.
 A continuación vamos a seguir los pasos de la instalación y una vez
finalizados comprobaremos la versión como indicamos en el paso
anterior para verificar que la instalación se ha realizado correctamente.
Nuestro primer programa.

 Una vez instalado Node.js, vamos a crear un programa que lo que hará
será, simplemente, escribir un texto por pantalla. Para ellos vamos a
seguir los siguientes pasos.
1. Vamos a crear un archivo llamado miPrimerPrograma.js
2. En el fichero vamos a añadir la siguiente línea: console.log("Hola Mundo");
3. Abrimos un terminal que apunte al directorio donde hemos guardado nuestro
fichero, y ejecutamos el siguiente comando: node miPrimerPrograma.js
4. Este deberá mostrarnos la frase que hayamos escrito en el comando, en
nuestro caso “Hola Mundo”.
Variables.
 En programación, una variable es un contenedor para un valor, como
un número, un texto, un objeto, etc.
 Para declarar variables en Node.js podemos hacerlo de 3 formas
diferentes.
 Var: tiene un alcance de función, es decir, si declaramos una variable con var
dentro de una función, podremos acceder a ella desde cualquier lugar dentro
de esa función. Por lo tanto, puede ser reasignable.
 Let: tiene un alcance de bloque, es decir, si declaramos una variable con let
dentro de un bloque, como if o for, sólo podremos acceder a esta variable
dentro de ese bloque.
 Const: se utiliza para declarar una variable cuyo valor no cambiará a lo largo
del programa. Por lo tanto, no puede ser reasignada.
var x = 2;

let y = 5;

const z = 9;
Variables. Ejemplo

 Vamos a crear el fichero variables.js, añadimos el siguiente bloque de


código y a continuación lo ejecutamos para ver qué ocurre.
Tipos de datos.

 Disponemos de los siguientes tipos de


datos:
 Number: permite valores numéricos.
 String: representa cadenas de texto.
 Boolean: representa un valor lógico. Puede
tener 2 valores true o false.
 Null: representa la ausencia de cualquier
valor.
 Undefined: representa una variable que
no ha sido declarada.
 Object: representa una colección de datos.
 Symbol: es un valor primitivo único e
inmutable.
 Para ver el tipo de datos utilizamos la
función typeof.
Tipos de Datos.
Uno de los datos más utilizados son los arrays. Vamos a ver algunas de sus
operaciones.
Operadores.

 Distinguimos entre los siguientes tipos de operadores:


 Operadores Aritméticos.
 Operadores de Asignación.
 Operadores de Cadena.
 Operadores de comparación.
 Operadores lógicos.
 Operadores Especiales – operador ternario.
Operadores.
Operadores Aritméticos.

Con ellos podemos realizar cálculos


matemáticos. Son:
 Suma (+)
 Resta (-)
 Multiplicación (*)
 División (/)
 Módulo (%)
Operadores.
Operadores de Asignación.

Son utilizados para asignar valores


a las variables.
 Asignación (=)
 Asignación de suma (+=)
 Asignación de resta (-=)
 Asignación de multiplicación
(*=)
 Asignación de división (/=)
 Asignación de módulo (%=)
Operadores.
Operadores de Cadenas.

Son utilizados para concatenar cadenas de texto.


Operadores.
Operadores de Comparación.

Los operadores de comparación se


utilizan para comparar operandos y
devuelven un valor lógico sobre la
comparación.
 Igual (==)
 Distinto (!=)
 Igualdad estricta(===)
 Diferencia estricta(!==)
 Mayor que(>)
 Mayor o igual (>=)
 Menor que(<)
 Menor o igual (<=)
Operadores.
Operadores Lógicos.

Los operadores lógicos son:


 And (&&)
 Or (||)
 Not (!)
Operadores.
Operadores Especiales.

El operador ternario es la abreviatura de la instrucción “if”. Asigna un


valor a una variable en base a una condición. La sintaxis es:
condition ? Value1 : value2
Estructuras de Control.

 Las estructuras de control son instrucciones que nos permiten evaluar si


se puede cumplir una condición o no, incluso nos puede ayudar a
evaluarla n cantidad de veces.
 Vamos a ver 4 tipos de estructuras:
 If-else
 For
 While
 Switch
Estructuras de Control.
If-else.

 Este tipo de estructura nos va a


permitir evaluar si una condición
se cumple o no.
 Su sintaxis es:
if (condicion) {
...
} else {

}
Estructuras de Control.
For.

 Un bucle for se repite hasta que


la condición que se está
evaluando se cumple.
 Su sintaxis es:
for ([expInit]; [condicion]; [inc])
{
...
}
Estructuras de Control.
While.

 Ejecuta una sentencia mientras se


cumple la condición que se está
evaluando.
 Para evitar bucles infinitos debemos
actualizar nuestra condición dentro
del bucle.
 Su sintaxis es:
while (condicion) {
...
}
Estructuras de Control.
Switch.
 Permite evaluar una expresión e
intenta igual el valor de la misma a
una etiqueta llamada case, que es
el caso a evaluar.
 Su sintaxis es:
switch (condicion) {
case “Opcion A”:
...
break;
case “Opcion B”:

break;
default:
break;
}
Estructuras de Control.
Ejercicios.
1. Realizar un programa que toma un array de números del 1 al 10 y devuelva la suma de los números pares
del mismo.

2. Programa que determine si un número dado es positivo, negativo o cero.

3. Programa que muestra el nombre del dia de la semana correspondiente a un número ingresado por el
usuario (1 para lunes, 2 para martes, etc.)

4. Escribe un programa que imprima los 10 primeros números impares.

5. Escribe un programa que imprima los 10 primeros números pares.

6. Escribe un programa que determine si un número es primo o no.

Para leer datos del teclado utilizamos el siguiente bloque de código:


Funciones.
 Una función es una parte fundamental del código que encapsula una
serie de instrucciones para realizar una tarea específica.
 Las funciones pueden ser definidas por el desarrollador y luego
invocadas en cualquier momento durante la ejecución del programa.
 La sintaxis para crear una función es la siguiente:
Function nombre (arg1, arg2, …, argN) {

...

}
Funciones
 Vamos a ver algunos de los puntos clave para explicar qué es una
función en Node.js.
1. Definición: Una función se define utilizando la palabra clave ‘function’,
seguida por un nombre opcional y paréntesis que pueden contener los
parámetros que la función aceptará:

2. Parámetros: Las funciones pueden aceptar cero o más parámetros que


pueden ser utilizados dentro del cuerpo de la función para realizar
operaciones
Funciones
3. Cuerpo de la función: el cuerpo de la función contiene las instrucciones
que se ejecutarán cuando la función sea invocada.
4. Valor de retorno: Una función puede devolver un valor utilizando la palabra
clave ‘return’. Este valor puede ser cualquier tipo de dato, como un número,
una cadena, un objeto o incluso otra función.

5. Invocación de la función: Para ejecutar una función, simplemente se llama


por su nombre, seguido de paréntesis que pueden contener los argumentos
necesarios.
Funciones
6. Funciones anónimas: También es posible definir funciones sin un nombre
específico. Estas con conocidas como funciones anónimas y se pueden
asignar a variables o pasarse como argumentos de otras funciones.

En resumen, una función de Node.js es una pieza reutilizable de código que


puede aceptar datos de entrada, procesarlos y devolver un resultado. Las
funciones son una parte esencial de la programación en Node.js y se utilizan
ampliamente para modularizar y organizar el código de una aplicación.
Funciones
Características de las funciones en Node.js

1. Reutilización de código: Las funciones permiten escribir una vez y reutilizar muchas
veces el código que realiza una tarea específica. Esto promueve la modularidad y la
eficiencia en el desarrollo de aplicaciones.
2. Abstracción: Las funciones permiten abstraer el detalle de cómo se realiza una tarea,
lo que facilita la comprensión del código y hace que sea más mantenible.
3. Encapsulamiento: Las funciones encapsulan un conjunto de operaciones
relacionadas, lo que significa que el resto del programa no necesita conocer los
detalles internos de cómo se implementa la funcionalidad.
4. Ámbito de variables: Las funciones en JavaScript, incluyendo Node.js, tienen su
propio ámbito de variables. Esto significa que las variables definidas dentro de una
función no son accesibles desde fuera de ella, a menos que se devuelvan
explícitamente o se pasen como argumentos.
5. Funciones de orden superior: En JavaScript, las funciones son de primera clase, lo
que significa que pueden ser asignadas a variables, pasadas como argumentos a otras
funciones y devueltas como valores de otras funciones. Esto permite construir patrones
de diseño avanzados y escribir código más flexible y expresivo.
Funciones
Tipos de funciones en Node.js

 Funciones síncronas: Estas funciones se ejecutan de manera


secuencial, bloqueando el hilo de ejecución hasta que se
completa la tarea. Pueden ser útiles para operaciones que no
requieren operaciones de entrada/salida (I/O) intensivas.
 Funciones asíncronas: Estas funciones no bloquean el hilo
de ejecución y permiten que otras operaciones continúen
mientras se espera que se complete una tarea, como la lectura
de un archivo o la realización de una solicitud HTTP. Node.js es
especialmente eficiente en la gestión de funciones asíncronas
gracias a su modelo de E/S no bloqueante.
Funciones
Funciones síncronas

 En este ejemplo, la función


sumaSincronica
simplemente suma dos
números y devuelve el
resultado. Al llamar a esta
función, el programa espera
a que se complete la
operación de suma antes de
continuar con la ejecución.
Esto significa que la función
sincrónica bloquea el hilo de
ejecución hasta que se haya
realizado la suma y se haya
devuelto el resultado.
Funciones
Funciones asíncronas.
 En este ejemplo, la función
leerArchivo utiliza la sintaxis
async/await para leer un archivo
de manera asíncrona y manejar
cualquier error que pueda ocurrir
durante la operación. Esto
permite que el programa
continúe ejecutándose mientras
se espera que se complete la
lectura del archivo.
Ejercicios.
1. Hacer una calculadora.
2. Obtener información. Dada un listado de alumnos y los resultados de sus exámenes indicar:
 ¿Cuántos han aprobado?
 ¿Cuántos han suspendido?
 Porcentaje de suficientes, notables y sobresalientes.
 Para los suspensos modificar su nota para añadir una nueva.
3. Calcular el área de un rectángulo: Escribir una función que tome dos parámetros (base y altura) y devuelva el área del
rectángulo.
4. Comprobar si un número es par o impar: Crear una función que tome un número como parámetro y devuelva true si es par y
false si es impar.
5. Generar un array de números pares: Escribir una función que tome un número como parámetro y devuelva un array de números
pares hasta ese número.
6. Calcular el factorial de un número: Crear una función que calcule el factorial de un número dado. El factorial de un número
entero positivo n, denotado por n!, es el producto de todos los números enteros positivos menores o iguales a n.
7. Validar si un año es bisiesto: Escribir una función que determine si un año dado es bisiesto o no. Un año es bisiesto si es divisible
por 4 pero no por 100, excepto si también es divisible por 400.
8. Contar la cantidad de palabras en una frase: Crear una función que cuente la cantidad de palabras en una frase dada.
9. Calcular el área de un círculo: Escribir una función que tome el radio de un círculo como parámetro y devuelva el área
correspondiente.
10. Revertir una cadena de texto: Crear una función que tome una cadena de texto como parámetro y devuelva la cadena revertida.
11. Generar un array de números primos: Escribir una función que tome un número como parámetro y devuelva un array de
números primos hasta ese número.
12. Convertir grados Celsius a Fahrenheit: Crear una función que tome una temperatura en grados Celsius como parámetro y
devuelva la temperatura equivalente en grados Fahrenheit.
Ejercicios.
13.Buscar el número más grande en una matriz de matrices: Escribe una
función que tome una matriz de matrices como entrada y devuelva el número
más grande.
14.Validar si una cadena es un palíndromo: Escribe una función que tome
una cadena como entrada y devuelva true si es un palíndromo (se lee igual de
adelante hacia atrás que de atrás hacia adelante) y false en caso contrario.
15.Sumar los valores de una matriz de objetos: Escribe una función que
tome una matriz de objetos como entrada, donde cada objeto tiene una
propiedad valor, y devuelva la suma de todos los valores.
16.Eliminar elementos duplicados de una matriz: Escribe una función que
tome una matriz como entrada y devuelva una nueva matriz sin elementos
duplicados.
17.Contar la frecuencia de caracteres en una cadena: Escribe una función
que tome una cadena como entrada y devuelva un objeto que muestre la
frecuencia de cada carácter en la cadena.
Asincronía.
 La asincronía hace referencia al suceso que no tiene lugar en total correspondencia
temporal con otro suceso. Es decir, si tenemos ambos procesos, se van a ejecutar de
forma simultánea, sin interferir uno en el otro.
 La asincronía va a permitir a nuestros programas iniciar una tarea de larga duración y
seguir respondiendo a otros eventos mientras esta se ejecuta, en lugar de tener que
esperar a que haya terminado.
 Tenemos 3 principales maneras de trabajar con asincronía:
 Callbacks: En Node.js, las funciones asíncronas a menudo utilizan callbacks para manejar la
finalización de una operación. Un callback es una función que se pasa como argumento a
otra función y que se ejecutará cuando la operación asíncrona se complete.
 Promesas: Las promesas son objetos que representan el resultado eventual de una
operación asíncrona. Proporcionan una forma más estructurada y flexible de manejar
operaciones asíncronas en comparación con los callbacks, permitiendo encadenar
operaciones y manejar errores de manera más efectiva.
 Async/await: Es una característica de JavaScript que simplifica la escritura de código
asíncrono, permitiendo escribir código asíncrono de manera síncrona. Se basa en el uso de
promesas y proporciona una sintaxis más clara y fácil de entender para trabajar con
funciones asíncronas.
Asincronía.
Callback.
 Son funciones que se pasan como argumento a otra función y se
ejecutan una vez que se completa una tarea particular.
 Se utilizan principalmente para manejar operaciones asíncronas, como
leer archivos, hacer solicitudes HTTP o realizar consultas a bases de
datos, donde el resultado no está disponible de inmediato.
 El inconveniente de utilizar callback es que si tenemos acciones que
dependen de otra vamos a ir encadenando, de tal forma que la
siguiente necesitará de la anterior para finalizar.
Asincronía.
Callback.
 Definición: Un callback es una función que se pasa como argumento a otra
función y se ejecuta después de que esta última ha terminado de ejecutarse. Los
callbacks son fundamentales en JavaScript para manejar operaciones asincrónicas
y eventos.
 Sintaxis: Los callbacks se definen como funciones anónimas o con nombre y se
pasan como argumentos a otras funciones que los invocan cuando sea necesario.
Asincronía.
Callback.
 Manejo de eventos: Los callbacks son comúnmente utilizados para
manejar eventos en JavaScript. Por ejemplo, en el navegador, se pueden
usar callbacks para manejar clics de botones, respuestas a solicitudes
de AJAX, entre otros.
Asincronía.
Callback.
 Control de flujo: Los callbacks
también se utilizan para
controlar el flujo de ejecución en
JavaScript, especialmente en
operaciones asincrónicas como
la lectura de archivos, las
solicitudes HTTP o las consultas
a bases de datos.
Asincronía.
Callback.
 Problemas de los callbacks: Aunque los callbacks son útiles, pueden llevar a
un fenómeno conocido como "callback hell" (infierno de callbacks) cuando se
anidan múltiples callbacks uno dentro de otro. Esto puede dificultar la lectura y
el mantenimiento del código.
 Los callbacks son esenciales en Node.js porque permiten que el código continúe
ejecutándose mientras se realizan operaciones asincrónicas en segundo plano.
Esto es crucial para construir aplicaciones web y servidores que puedan manejar
múltiples solicitudes simultáneas sin bloquear el hilo principal de ejecución.
 En resumen, los callbacks son funciones que se pasan como argumentos a otras
funciones y se ejecutan después de que estas últimas han terminado de
ejecutarse. Son fundamentales en JavaScript para manejar operaciones
asincrónicas, eventos y controlar el flujo de ejecución del código. Sin embargo,
pueden conducir a problemas de legibilidad y mantenibilidad cuando se utilizan
en exceso o se anidan profundamente.
Asincronía.
Callback.
 Imagina que necesitas leer el contenido de
un archivo en Node.js. En lugar de esperar
a que se lea todo el archivo antes de
continuar con el código, puedes pasar una
función (el callback) que se ejecutará una
vez que la lectura del archivo esté
completa.
 En el ejemplo, ‘fs.readfile’ es una función
asíncrona que lee el contenido del archivo
‘aarchivo.txt’. Toma dos argumentos: el
nombre del archivo y una función de
callback que se ejecutará cuando la
operación de lectura esté completa. La
función de callback toma do parámetros:
‘error’, que contendrá cualquier error que
ocurra durante la operación, y ‘ datos’, que
contendrá el conteniddo el archivo si la
operación se completa con éxito.
Asincronía.
Promesas.
 Las promesas son un mecanismo para manejar operaciones asincrónicas
en JavaScript de una manera más elegante y estructurada que los
callbacks. Proporcionan una forma más clara y poderosa de trabajar con
código asincrónico, permitiendo encadenar operaciones y manejar
errores de manera más eficiente.
Asincronía.
Promesas.
 Sintaxis: Una promesa es un objeto que representa el resultado
eventual de una operación asincrónica. Se crea con el constructor
Promise, que toma una función ejecutora como argumento. Esta función
ejecutora a su vez toma dos parámetros, resolve y reject, que son
funciones que se utilizan para resolver o rechazar la promesa,
respectivamente.
Asincronía.
Promesas.
 Estados de la promesa:
 Pendiente: Cuando se crea una promesa,
inicialmente está en estado pendiente.
 Resuelta (fulfilled): Cuando la operación
asincrónica se completa con éxito, la promesa
pasa al estado resuelto y se llama a la función
‘resolve’.
 Rechazada (rejected): Si la operación
asincrónica falla, la promesa pasa al estado
rechazado y se llama a la función ‘reject’.
 Encadenamiento de promesas: Una de las
características más poderosas de las promesas
es su capacidad para encadenar múltiples
operaciones asincrónicas de manera más legible
y estructurada. Esto se logra utilizando el
método ‘.then()’ para manejar el resultado
exitoso de una promesa y el método ‘.catch()’
para manejar cualquier error que ocurra en la
cadena de promesas.
Asincronía.
Promesas.
 Las promesas ofrecen algunas ventajas sobre los callbacks, como una
sintaxis más limpia y la capacidad de encadenar múltiples operaciones
asincrónicas de manera más legible. Además, permiten un manejo más
efectivo de los errores mediante el uso del método .catch() para
capturar cualquier error que ocurra en la cadena de promesas.
 En resumen, las promesas son un mecanismo para manejar operaciones
asincrónicas en JavaScript de una manera más elegante y estructurada
que los callbacks. Proporcionan una forma más clara y poderosa de
trabajar con código asincrónico, permitiendo encadenar operaciones y
manejar errores de manera más eficiente.
Asincronía.
Promesas.
 Imagina que necesitas leer el contenido de un
archivo en Node.js, pero en lugar de utilizar un
callback, prefieres trabajar con promesas.
Puedes utilizar el método fs.promises.readFile()
para realizar esta tarea de manera asincrónica y
obtener una promesa que se resolverá cuando
la operación de lectura esté completa. Veamos
un ejemplo.
 En este ejemplo, fs.promises.readFile() es una
función asincrónica que devuelve una promesa.
Llamamos a este método con el nombre del
archivo que queremos leer y luego
encadenamos el método .then() para manejar el
resultado exitoso de la promesa (es decir,
cuando la operación de lectura se completa con
éxito) y el método .catch() para manejar
cualquier error que ocurra durante la operación.
Asincronía.
Async/Await.
 Nos va a permitir que el código se vea como si fuera síncrono.
Asincronía.
Async/Await.
 Async/await es una característica en Node.js que simplifica la escritura y gestión de código asincrónico. Permite escribir código
asincrónico de una manera que se asemeja a la escritura de código síncrono, lo que hace que sea más fácil de leer y entender,
especialmente para los desarrolladores acostumbrados a un estilo de programación secuencial.

 Funciones async: Para utilizar async/await, primero debemos definir una función con la palabra clave async. Esto indica que la
función contendrá código asincrónico y que la ejecución de la función será pausada hasta que todas las operaciones asincrónicas
dentro de ella se completen.

 Await: La palabra clave await se utiliza dentro de una función async para esperar la resolución de una promesa. Cuando se
encuentra await, la ejecución de la función se pausa hasta que la promesa se resuelva y se devuelve su valor resuelto.
Asincronía.
Async/Await.
 Manejo de errores: Al igual
que con las promesas, podemos
usar un bloque try...catch para
manejar errores al utilizar
async/await en Node.js. Esto
simplifica el manejo de errores
en comparación con el uso de
callbacks o el encadenamiento
de promesas.
Asincronía.
Async/Await.
 Encadenamiento: Al igual que
con las promesas, podemos
encadenar múltiples
operaciones asincrónicas
utilizando async/await en
Node.js, lo que resulta en un
código más limpio y fácil de
entender.
Asincronía.
Ejercicios.
1. Vamos a simular un máquina de Café.
2. Vamos a simular el login en una aplicación.
3. Supongamos que tienes un directorio con varios archivos de texto y quieres leer el contenido de cada uno de ellos de
forma asíncrona. Para ello, puedes escribir un programa en Node.js que utilice async/await para leer el contenido de
cada archivo y mostrarlo por consola.
4. Promesas: Escribe una función que simule la obtención de datos de un servidor remoto utilizando una promesa. La
función debe resolver la promesa con algún dato después de un tiempo determinado (por ejemplo, 2 segundos).
5. Callbacks: Escribe una función que lea el contenido de un archivo de texto y llame a un callback con el contenido del
archivo como argumento. Utiliza el módulo fs de Node.js para realizar la lectura.
6. Async/await: Escribe una función asíncrona que lea el contenido de un archivo de texto utilizando async/await. Utiliza
el módulo fs.promises de Node.js para realizar la lectura.
7. Promesas con múltiples llamadas: Escribe una función que utilice promesas para realizar múltiples llamadas a una
API REST para obtener información sobre usuarios. Las llamadas deben ser concurrentes y se deben resolver todas
las promesas al mismo tiempo. Luego, muestra la información de los usuarios por consola.
8. Callbacks en serie: Escribe una función que utilice callbacks para realizar varias operaciones de forma secuencial. Por
ejemplo, lee el contenido de un archivo, realiza alguna manipulación y luego escribe el resultado en otro archivo.
9. Async/await con manejo de errores: Escribe una función asíncrona que utilice async/await para realizar operaciones
con un temporizador. Captura cualquier error que pueda ocurrir durante la ejecución.
Módulos en Node.js.

 Un módulo no es más que un bloque de código reutilizable, es decir, un


archivo JavaScript que agrupa funciones, clases, variables que pueden
ser exportadas y utilizadas en cualquier parte de nuestra aplicación.
 Para poder utilizar las funciones del módulo debemos exportar cada una
de ellas:
module.exports = {

}
 Además debemos importar el módulo en nuestro archivo.
Módulos.
Ejercicios.

 Vamos a realizar los siguientes ejercicios.


1. Vamos a crear un programa al cual le pasamos un texto y debemos convertirlo a
mayúsculas y a minúsculas.
2. Vamos a crear un programa que permita el manejo de archivos. Crearemos un módulo
que permita leer, escribir y borrar archivos y lo utilizamos.
3. Vamos a crear un programa para calcular estadísticas.
4. Crear un programa que genere contraseñas aleatorias.
5. Vamos a crear un programa que valide la contraseña de un usuario. Partimos de los
siguientes datos:
const usuarios = [

{ id: 1, nombre: 'Usuario1', email: '[email protected]', password: 'password1' },

{ id: 2, nombre: 'Usuario2', email: '[email protected]', password: 'password2' },

{ id: 3, nombre: 'Usuario3', email: '[email protected]', password: 'password3' }

];
Módulos.
Ejercicios.

6. Crear un sistema de gestión de usuarios que permita registrar nuevos usuarios y mostrar detalles de
usuarios existentes. El sistema debe implementarse utilizando módulos en Node.js para organizar la lógica
de la aplicación de manera adecuada. El sistema debe tener las siguientes funcionalidades:
 Registro de usuarios:
 Debe permitir agregar nuevos usuarios al sistema con los siguientes datos: nombre, correo electrónico y contraseña.
 Cada usuario debe tener un nombre único en el sistema.
 Al registrar un nuevo usuario, el sistema debe almacenar sus datos para futuras consultas.
 Consulta de usuarios:
 Debe permitir buscar usuarios por su correo electrónico y mostrar sus detalles, incluyendo nombre y correo electrónico.
 Si el usuario buscado no existe en el sistema, debe mostrar un mensaje indicando que el usuario no fue encontrado.

El sistema debe implementarse utilizando los siguientes módulos:


 usuarioModelo.js: Define una clase Usuario que represente el modelo de usuario con propiedades como nombre,
email y contraseña.
 usuarioControlador.js: Contiene funciones para manejar las operaciones relacionadas con los usuarios, como
crear nuevos usuarios y buscar usuarios por su correo electrónico.
 usuarios.js: Implementa la lógica de la aplicación, como crear usuarios de ejemplo y consultar detalles de usuarios
existentes.
Manejo de paquetes con npm.
 Npm es un gestor de paquetes que viene integrado con Node.js.
 Nos permite instalar paquetes de terceros y administras dependencias
fácilmente.
 Vamos a ver algunos de los comandos más utilizados y posteriormente los
pondremos en práctica.
 Npm install: se utiliza para instalar nuevos paquetes.
 Npm uninstall: se utiliza para desinstalar paquetes.
 Npm init: se utiliza para inicializar un proyecto. Al ejecutar este comando se creará
un fichero llamado “package.json”.
 Npm update: para actualizar un paquete.
 Npm restart: para reiniciar un paquete.
 Npm star: para iniciar un paquete.
 Npm stop: para parar un paquete.
 Npm version: para comprobar la versión instalada en nuestro equipo.
 Podemos instalar un paquete de forma global añadiendo “-g” en la
instalación de nuestro paquete. Esto nos permitirá acceder a él desde
Manejo de paquetes con npm.
 Utilización básica de npm:
 Instalar un paquete: Para instalar un paquete, utiliza el comando npm install <nombre-del-paquete>.
 Ejemplo: npm install express instalará el paquete Express en tu proyecto.
 Guardar un paquete como dependencia: Puedes guardar un paquete como dependencia de tu proyecto
utilizando las opciones --save o --save-dev.
 --save: Guarda el paquete como una dependencia de producción. Se agregará al archivo package.json bajo la clave
dependencies.
 --save-dev: Guarda el paquete como una dependencia de desarrollo. Se agregará al archivo package.json bajo la
clave devDependencies.
 Gestión de dependencias con package.json:
 package.json: Es un archivo de metadatos de tu proyecto que contiene información sobre el proyecto y
sus dependencias.
 npm utiliza package.json para gestionar las dependencias del proyecto.
 Puedes generar un package.json interactivo ejecutando npm init y siguiendo las instrucciones.
 Instalación de dependencias desde package.json:
 Para instalar todas las dependencias listadas en package.json, puedes ejecutar npm install.
 Esto instalará todas las dependencias de producción y de desarrollo listadas en dependencies y
devDependencies, respectivamente.
 Uso de paquetes instalados:
 Una vez instalado un paquete, puedes utilizarlo en tu proyecto utilizando la función require de Node.js.
 Por ejemplo, const express = require('express') importa el paquete Express para utilizarlo en tu
aplicación.
Manejo de paquetes con npm.

Ventajas de usar npm:


 Gran variedad de paquetes: npm cuenta con un amplio ecosistema de paquetes de código
abierto que abarcan una amplia gama de funcionalidades y utilidades.
 Facilidad de uso: Es fácil de instalar y utilizar, lo que lo hace ideal para desarrolladores de
todos los niveles de experiencia.
 Gestión de dependencias simplificada: Facilita la gestión de dependencias de proyectos, lo
que ayuda a mantener un entorno de desarrollo más limpio y organizado.
 Repositorio centralizado: npm proporciona un repositorio centralizado de paquetes donde
los desarrolladores pueden encontrar una amplia gama de soluciones para diferentes
necesidades de desarrollo. Este repositorio centralizado facilita la búsqueda y la instalación de
paquetes, lo que ahorra tiempo y esfuerzo a los desarrolladores.
 Gestión de versiones: npm facilita la gestión de versiones de paquetes mediante el uso de
versiones semánticas. Los desarrolladores pueden especificar rangos de versiones en el archivo
package.json, lo que permite controlar qué versiones de las dependencias se instalan en un
proyecto. Esto ayuda a evitar problemas de compatibilidad y a garantizar la estabilidad y la
integridad del proyecto.
Manejo de paquetes con npm.
 Vamos a ver un ejemplo de cómo trabajamos con npm.
1. Iniciamos un nuevo proyecto de Node.js, para ello ejecutamos en la
terminal el comando: npm init.
2. Vamos a instalar un paquete para poder trabajar con él. Ejecutamos:
npm install validator.
3. Creamos un archivo llamado “validar_correo.js” y añadimos el código.
4. Finalmente, lo ejecutamos. Utilizamos el comando: node
validar_correo.js.
5. Hacer lo mismo con el paquete “lodash”.
Al instalar paquetes automáticamente se guardan en la sección de
“dependencias” del archivo package.json.
Manejo de paquetes con npm.
 Ejercicio 1: Instalación de un paquete y uso en un proyecto. Instala el paquete
“lodash” y utilízalo.
 Ejercicio 2: Utiliza el paquete ‘axios’ para hacer solicitudes HTTP.
 Ejercicio 3: El paquete ‘jsonwebtoken’ es una herramienta comúnmente
utilizada para generar y verificar tokens JWT (JSON Web Tokens), que son
ampliamente utilizados para la autenticación de usuarios en aplicaciones web
y APIs. Utiliza este paquete para generar un token JWT cuando un usuario
inicie sesión y verificar ese token en rutas protegidas.
 Ejercicio 4: El paquete ‘nodemailer’ es una biblioteca popular en Node.js
para enviar correos electrónicos de forma programática. Vamos a utilizarlo
para enviar un correo electrónico desde una cuenta de Gmail a otra dirección
de correo electrónico.
 Ejercicio 5: El paquete ‘chalk’ es una biblioteca que te permite dar color a la
salida en la consola. En este ejercicio, utilizaremos este paquete para imprimir
mensajes con diferentes colores en la consola.
Creación de un servidor básico.

 Node.js es muy utilizado para crear servidores web. Vamos a crear un servidor web
básico que lo que hará será responder con “Hola mundo” a todas las solicitudes.
 Crear un archivo llamado “servidor.js” y escribiremos el siguiente código:
const http = require('http’);
const servidor = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hola mundo.');
});
servidor.listen(3000, () => {
console.log('El servidor está escuchando en el puerto 3000...');
});

 Ejecutamos el comando: node servidor.js.


 Ahora abrimos el navegador y vamos a http://localhost:3000/. Deberíamos ver
“Hola mundo” en la página.
API.
¿Qué es una API?
 Un API es un conjunto de definiciones y protocolos que se utilizan para desarrollar
e integrar el software de las aplicaciones, permitiendo la comunicación entre dos
aplicaciones de software a través de un conjunto de reglas.
API.
API REST.
 La definición de API REST (Representational State Transfer) es un estilo de arquitectura de software que se
basa en estándares web y utiliza los verbos y métodos HTTP (como GET, POST, PUT, DELETE) para realizar
operaciones sobre los recursos de un sistema. Un API REST permite que diferentes aplicaciones se
comuniquen y accedan a datos de manera simple y coherente a través de Internet.
 Una API REST es una interfaz de programación que sigue los principios del estilo de arquitectura REST y
utiliza HTTP para facilitar la comunicación y el intercambio de datos entre aplicaciones. Es ampliamente
utilizado en el desarrollo web y en la creación de servicios y aplicaciones modernas.
API.
API REST. Características.
 Arquitectura Cliente-Servidor: La arquitectura cliente-servidor separa las preocupaciones del cliente y del servidor,
lo que permite una mayor escalabilidad y flexibilidad en el diseño del sistema.
 Sin estado (Stateless): Cada solicitud del cliente al servidor debe contener toda la información necesaria para
comprender y procesar la solicitud. El servidor no guarda ningún estado de sesión del cliente entre solicitudes. Esto
permite una mejor escalabilidad, ya que cada solicitud se puede manejar de forma independiente.
 Interfaz uniforme: Una API REST sigue una interfaz uniforme que define cómo interactuar con los recursos del
sistema a través de la identificación única de los recursos, la manipulación de recursos a través de representaciones y
la auto-descripción de las capacidades del sistema.
 Operaciones HTTP estándar: Las operaciones CRUD (Crear, Leer, Actualizar, Borrar) se mapean a los métodos HTTP
estándar: POST, GET, PUT y DELETE, respectivamente. Esto proporciona una forma consistente y predecible de
interactuar con los recursos del sistema.
 Estado de representación: La representación de un recurso es la forma en que se presenta al cliente que realiza la
solicitud. Puede ser en formato JSON, XML, HTML, etc. En una API REST, el servidor no guarda el estado del cliente
entre las solicitudes; en su lugar, cada solicitud contiene toda la información necesaria para llevar a cabo la acción
solicitada.
 Uso de Código de Estado: La API debe utilizar códigos de estado HTTP para indicar el resultado de una operación.
Por ejemplo, 200 OK para una solicitud exitosa, 404 Not Found si no se encuentra un recurso, etc.
 Seguridad: Las API REST deben implementar medidas de seguridad para proteger los datos y restringir el acceso no
autorizado.
 Versionamiento: Es común que las API REST utilicen versiones para asegurar la compatibilidad en caso de futuras
actualizaciones.
API.
API REST. Verbos.

 GET: Se utiliza para obtener información o recursos del servidor. Es como hacer una "lectura" de datos. Imagina que es como
pedir una página web, donde recibes la información que solicitaste.
 POST: Se utiliza para enviar datos nuevos al servidor y crear un recurso. Es como llenar un formulario y enviarlo para que se
registre la información en la base de datos del servidor.
 PUT: Se utiliza para actualizar o modificar recursos existentes en el servidor. Imagina que es como editar una publicación o
cambiar información que ya existe.
 DELETE: Se utiliza para eliminar recursos del servidor. Es como "borrar" algo de la base de datos o eliminar una publicación.
API.
API REST. Códigos de Respuesta.

 200 OK: Indica que la solicitud fue exitosa y el servidor pudo devolver la respuesta solicitada. Es el código de
respuesta más común para una solicitud exitosa.
 201 Created: Se utiliza para indicar que la solicitud ha sido exitosa y que el servidor ha creado un nuevo recurso
como resultado de la operación. Por ejemplo, cuando se crea un nuevo registro en una base de datos.
 204 No Content: Indica que la solicitud se ha procesado correctamente, pero no hay contenido para devolver. Es
comúnmente utilizado para respuestas a peticiones de borrado o actualización donde no es necesario enviar datos
adicionales.
 400 Bad Request: Se produce cuando el servidor no pudo entender la solicitud debido a un error del cliente, como
sintaxis incorrecta o datos inválidos en la solicitud.
 401 Unauthorized: Indica que el cliente debe autenticarse para obtener la respuesta solicitada. Es decir, el cliente
no tiene permisos para acceder a la información sin proveer credenciales válidas.
 403 Forbidden: Similar al código 401, pero en este caso, el servidor sabe quién es el cliente, pero el cliente no tiene
permisos suficientes para acceder al recurso solicitado.
 404 Not Found: Indica que el servidor no pudo encontrar el recurso solicitado. Es un código comúnmente visto
cuando se intenta acceder a una URL o recurso inexistente.
 500 Internal Server Error: Es un código de error genérico que indica que ha ocurrido un error interno en el servidor
y no se puede procesar la solicitud del cliente correctamente.
 503 Service Unavailable: Indica que el servidor no está listo para manejar la solicitud. Puede deberse a una
sobrecarga temporal o mantenimiento del servidor.
API.
API REST. Códigos de Respuesta.
Creación de un servidor web avanzado.

 Express es un framework de Node.js que se utiliza para construir una


variedad de aplicaciones web y servicios backend, proporcionando una
manera rápida y eficiente de manejar el enrutamiento, las solicitudes y
las respuestas HTTP en aplicaciones Node.js.
 Vamos a crear nuestro servidor web con express. Para ello vamos a
seguir los siguientes pasos:
1. Creamos una nueva carpeta y la abrimos en el terminal.
2. Inicializamos un nuevo proyecto de Node.js con el comando: npm init/npm
init -y.
3. Instalamos express.js: npm install express.
4. Creamos un archivo server.js y añadimos nuestro código.
5. Ejecutamos nuestro servidor.
Creación de un servidor web avanzado.
Peticiones a una API externa.
 Para realizar llamadas a aplicaciones externas vamos a utilizar, por
ejemplo, el paquete axios.
 https://github.com/public-apis/public-apis Apis públicas
 https://jsonlint.com/ Visualizador objetos JSON
 https://www.postman.com/ App de escritorio lanzamiento de
peticiones

 Apis útiles
 https://pokeapi.co/
 https://opentdb.com/api_config.php
EJERCICIO FINAL 1.
Crear un servidor utilizando Node.js y Express que funcione como un sistema de gestión de una biblioteca. El
servidor debe proporcionar diferentes endpoints para dar de alta, sacar, editar y listar libros de la biblioteca.
 Requisitos:
 Endpoint para dar de alta un libro:
 Debe permitir enviar una solicitud POST al endpoint /libros con los datos del libro (título, autor, año de publicación,
género, etc.).
 El servidor debe guardar el nuevo libro en una estructura de datos adecuada.
 Endpoint para sacar un libro:
 Debe permitir enviar una solicitud DELETE al endpoint /libros/:id para sacar un libro de la biblioteca, especificando su ID
en la URL.
 El servidor debe eliminar el libro correspondiente de la estructura de datos.
 Endpoint para editar un libro:
 Debe permitir enviar una solicitud PUT al endpoint /libros/:id para editar los detalles de un libro existente, especificando
su ID en la URL.
 El servidor debe actualizar los datos del libro correspondiente en la estructura de datos.
 Endpoint para listar los libros:
 Debe permitir enviar una solicitud GET al endpoint /libros para obtener una lista de todos los libros de la biblioteca.
 El servidor debe devolver una respuesta con los detalles de todos los libros almacenados.
 Consideraciones adicionales:
 Utiliza Express para crear el servidor y manejar las rutas.
 Utiliza una estructura de datos adecuada para almacenar los libros, por ejemplo, un array de objetos.
 Puedes simular la persistencia de datos utilizando una estructura de datos en memoria por ahora, aunque en un
entorno de producción deberías considerar utilizar una base de datos.
 Utiliza JSON para el intercambio de datos entre el cliente y el servidor.
EJERCICIO FINAL 2.

 Vamos a utilizar la API pública externa ‘https://catfact.ninja/’.


 Vamos a construir un servidor web que realice las siguientes acciones:
1. Obtenga los datos aleatorios sobre los gatos los mostrará en pantalla.
2. Obtenga los datos de todas las razas de gatos y los clasifique por países,
indicando el número de razas de ese país y sus nombres.
FIN

También podría gustarte