Qué es nodejs
NodeJS es un intérprete de JavaScript que se ejecuta en servidor.
Está basado en el motor de JavaScript que utiliza Google Chrome (V8), escrito en C++
Características principales
El tener el mismo lenguaje en cliente y servidor
Permite a cualquier persona desarrollar en backend o en frontend
Permite reusar código o incluso mover código de cliente a servidor o al revés
Está orientado a eventos y utiliza un modelo asíncrono (propio de JavaScript).
Al contrario que en el navegador, encontramos muchas llamadas asíncronas:
Llamadas a APIs.
Lectura y escritura de ficheros.
Ejecución de cálculos en el servidor.
Llamadas síncronas en servidor serían fatales:
¡Bloqueariamos las conexiones al servidor hasta que acabase la instrucción
bloqueante!
Al ser asíncrono podremos tener muchas sesiones concurrentes.
Es monohilo
Utiliza un solo procesador
Si queremos usar toda la potencia de la CPU, tendremos que levantar varias
instancias de node y utilizar un balanceador de carga (por ejemplo con pm2).
Instalación de NodeJS
Lo primero que haremos es instalar el [Link] (Hay una versión recomendada y es la que
debemos instalar).
Verificar la instalación de nodejs, ejecutar el comando CMD para abrir la consola, y
ejecutar el siguiente comando: node --version
Con la instalación de nodejs, también se instala el gestor de paquetes npm, para verificar :
npm –version
Módulos en [Link]
La primera gran diferencia en el JavaScript que se utiliza en [Link] es el
concepto de módulo. Sabemos que cuando nuestra aplicación comienza a crecer
un único archivo es imposible de manejar todas las funcionalidades, lo mismo
ocurre con librerías desarrolladas por otros programadores.
Un módulo contiene funciones, objetos, variables donde indicamos cuales serán
exportados para ser utilizados por otros programas.
En [Link], un módulo es un conjunto de funciones y objetos de JavaScript que
las aplicaciones externas pueden usar. La descripción de un fragmento de código
como módulo se refiere menos a lo que es el código que a lo que hace; cualquier
archivo de [Link] o colección de archivos puede considerarse un módulo si sus
funciones y datos se pueden utilizar en programas externos.
Debido a que los módulos proporcionan unidades de funciones que pueden
reutilizarse en muchos programas más grandes, permiten crear aplicaciones
acopladas libremente que se adaptan a la complejidad y que pueda compartir su
código con otros desarrolladores. Ser capaz de escribir módulos que exporten
funciones y datos útiles, le permitirá hacer aportes a la comunidad de [Link] más
amplia. De hecho, todos los paquetes que utilice en npm se agrupan y se
comparten como módulos. Esto hace que crear módulos sea una habilidad
esencial para un desarrollador de [Link].
Módulo http
Un módulo fundamental para implementar aplicaciones en un servidor web es el
'http'.
'http' es un módulo del core de [Link] e implementado en C para una mayor
eficiencia en las conexiones web.
Protocolo HTTP
Lo primero que haremos es repasar el funcionamiento de este protocolo tan
importante en [Link] (HyperText Transfer Procolol) o (Protocolo de
transferencia de hipertexto) permite la transferencia de datos entre un servidor
web y normalmente un navegador.
Cuando accedemos a un sitio web desde un navegador escribimos entre otras
cosas:
[Link] y archivo][?parámetros]
http (indica el protocolo que utilizamos para conectarnos con un servidor
web)
host (es el nombre del dominio por ej. [Link])
puerto (es un número que generalmente no lo disponemos ya que por
defecto el protocolo http utiliza el nro 80, salvo que nuestro servidor
escuche peticiones en otro puerto que ya en este caso si debemos
indicarlo)
[/ruta y archivo] (indica donde se encuentra el archivo en el servidor)
?parámetros (datos que se pueden enviar desde el cliente para una mayor
identificación del recurso que solicitamos)
Desde el navegador parte el pedido y el servidor tiene por objetivo
responder a esa petición.
Servidor web con [Link]
Cuando trabajamos con la plataforma [Link] debemos codificar nosotros el
servidor web (muy distinto a como se trabaja con PHP, [Link], JSP etc. donde
disponemos en forma paralela un servidor web como puede ser el Apache o IIS)
Veremos inicialmente la implementación de un servidor web utilizando solo el
módulo 'http' pero más adelante incorpararemos otros módulos que nos facilitan el
desarrollo de sitios web complejos (de todos modos siempre utilizando y
extendiendo las funcionalidades del módulo 'http').
A continuación vamos a Implementar un servidor web con [Link] que
retorne HTML con un mensaje indicando que el sitio esta en desarrollo. No
importa que archivo pidamos del servidor retornar siempre el mismo HTML.
Crear un folder de pruebas : pruebas_nodejs.
Abrir Visual Studio Code y en el folder anterior un archivo con el nombre: [Link].
Agregar el siguiente código:
const http = require('http')
const puerto = 8088;
const servidor = [Link]((pedido, respuesta) => {
[Link](200, { 'Content-Type': 'text/html' });
[Link](`<!doctype html><html><head></head>
<body><h1>Sitio en desarrollo utilizando
nodejs</h1></body></html>`);
[Link]();
});
/* El servidor escucha las peticiones por el puerto 8888,
y responde por el mismo puerto.
*/
[Link](puerto);
[Link](`Servidor web iniciado en el puerto ${puerto}`);
Para probar nuestro servidor, abrimos una nueva terminal dentro del entorno de
Visual Studio Code
Escribimos el siguiente comando: node [Link]
Podemos observar que el servidor esta respondiendo por el puerto 8088.
Podemos abrir nuestro navegador y acceder al servidor local (localhost) en el puerto 8888
y ver que ahora tenemos como resultado:
Si detenemos el servidor que creamos desde la consola (Presionamos las teclas
Ctrl C que aborta el programa) y solicitamos nuevamente datos al servidor
podremos ver que ahora el servidor no responde:
Nota:
Es importante entonces tener en cuenta que el programa [Link] este ejecutándose para
poder pedirle recursos. Otra cosa muy importante es que cada vez que hagamos cambios en
el código fuente de nuestra aplicación en JavaScript debemos detener y volver a lanzar el
programa para que tenga en cuenta las modificaciones.
Fin..