Promoción verano: 6 meses de acceso a todos los cursos online de programación con el 50% de descuento
offer

Buscar
alojamiento WordPress
Buscamos patrocinadores

Espacio publicitario para patrocinadores.

Contacta con nosotros para disponer de más información.

Servidor node js

 

imagen dos

 

En este artículo comentamos como montar un servidor node js.

En este tutorial vamos a hacer un tutorial Node.js para programar un servidor web en 5 minutos.
En tan sólo 5 minutos? Así es, y con poco más de cuatro o cinco líneas de código.

Qué es node js?

Node.js es un framework entorno de código abierto de Javascript orientado a la parte servidora. Es orientado a eventos y está basado en el motor V8 de Google.




La mayoría de los developers que trabajan con tecnologías de Internet conocen Javascript en la parte cliente. Básicamente se ha extendido su uso en los navegadores junto el HTML y los CSS. Pero hace unos 6 años entró en escena este framework entorno de código abierto para usarlo en la parte servidora.

Incluso hoy en día gracias a Electron, se puede utilizar para crear aplicaciones de escritorio en Javascript, como por ejemplo Atom, un editor de código.

En otros lenguajes como Java, necesitamos un servidor de aplicaciones como por ejemplo Weblogic, para poder ejecutar el código en la parte servidora. Para Node.js esto no es necesario ya que la propia aplicación ya puede realizar la función de servidor. Aunque también es posible utilizar un servidor web, como por ejemplo Nginx junto con Node.js.



Usar Node.js en la parte servidora nos permite realizar un desarrollo más coherente, y más integrado, ya que usamos las mismas tecnologías en ambos extremos. Además está orientado a eventos, y no es bloqueante, con lo que nos encontraremos que las funciones no se invocan una después de la otra, sino que las funciones son de tipo "callback", es decir, son invocadas cuando un evento es disparado por alguna acción.

En el tutorial que vamos a mostrar a continuación realizaremos la instalación de Node.js en Ubuntu y crearemos un servidor web básico.  


Para empezar el tutorial recuperaremos la máquina virtual que creamos en el post: cómo instalar Linux en una máquina virtual de VirtualBox.

Instalar node js

Abriremos la máquina virtual y una vez arrancado el sistema operativo abriremos una consola con Ctr + Alt +T. Allí escribiremos:

sudo apt-get update
sudo apt-get install nodejs

Recomendado Si quieres programar el ejemplo puedes utilizar el siguiente entorno nodejs sobre Ubuntu (próximamente sólo para usuarios registrados):

 

 También tienes disponible el código fuente del tutorial en GitHub


Una vez finalizado esto nos dejará instalado en nuestro Linux las librerías básicas de Node.js.

Tutorial de Node.js

A continuación mostramos una breve introducción.

Los programas en Node.js se escriben en Javascript aunque también se podría usar Typescript que es un superset de Javascript.

Para arrancar un programa en Node.js basta con crear un simple fichero (app.js) y escribir en la consola: node app.js
Para salir del programa se puede apretar Control+C o se puede utilizar el módulo process con el método exit()

Variables de entorno

Se pueden leer las variables de entorno del sistema operativo con este mismo módulo process y la propiedad env tal como: process.env.MI_VAR

Node.js tiene un modo interactivo que se arranca simplemente teclenado node en la consola del sistema. En este modo se pueden leer variables, ficheros, evaluar expresiones, imprimir su valor, realizar bucles, etc...

Pasar argumentos al programa

También se pueden pasar argumentos en la línea de comandos. Por ejemplo: node server.js param
Se puede acceder a ellos usando el módulo process y la propiedad argv que es un array que contiene los argumentos. El primer argumento es la ruta del ejecutable node, el segundo es la ruta del fichero que se ejecuta, y los restantes son los argumentos (param).

Escribir por pantalla

Para escribir por consola se usa el módulo console con el método log(x) donde x es un string que imprimirá por pantalla. Para imprimir el "stack trace" se puede usar console.trace().
Por defecto se imprime en el stdout, pero podemos escribir en el stderr con el método console.error(x)

Módulos

Node.js contiene un sistema de módulos muy útil para reutilizar código desde otros ficheros de la aplicación.
Para importar un módulo propio se utiliza require(ruta del módulo)
Para exportar un módulo se usa module.exports para hacer público un objeto o exports para hacer público las propiedades del objeto.

El gestor de paquetes npm

Se utiliza un gestor de paquetes llamado npm para instalar librerías o paquetes adicionales a los que vienen por defecto en Node.js
Por ejemplo para instalar un paquete sería npm install paquete
Existen multitud de ellos en npmjs.

El bucle de eventos y los temporizadores

El bucle de eventos es una de las características más importantes de Node.js
Una aplicación Node.js se ejecuta en un solo hilo de ejecución.
La idea es crear métodos asíncronos que no bloqueen ese hilo de ejecución.
Para ello se usan callbacks, promises y async + await.
En cada bucle se puede definir una ejecución forzada de una función usando process.nextTick() esto fuerza a que se invoque esa función el final del paso del bucle, antes de empezar la siguiente iteración.

En Node.js se pueden crear temporizadores con setTimeout(mifunc, x) y setInterval(mifunc, y).
Esto es el primero se ejecuta mifunc después de "x" milisegundos y el segundo se ejecuta mifunc a cada intervalo de "y" milisegundos.

El módulo Http

Node.js incluye por defecto un módulo para peticiones HTTP. Este lo podemos usar del siguiente modo: const http = require('http');
También se incluye la posibilidad de usar WebSockets que es una comunicación en dos direcciones entre el cliente y el servidor y que mantiene la conexión "viva" en toda la interacción.

Ficheros

A parte de estos módulos también se incluye el módulo fs para gestionar ficheros y os para llamadas al sistema operativo.

Bases de datos

Por último también existen módulos externos para trabajar con bases de datos, como es el caso de MongoBD con el módulo mongoose y de MySQL con el módulo mysql.

Cómo crear un servidor

A continuación crearemos un proyecto en una carpeta de nuestra $HOME con mkdir servidor-web-nodejs y dentro de la carpeta usamos el gestor de paquetes (npm) para crear un fichero package.json que contiene la configuración del proyecto. Con el comando npm init nos irá haciendo preguntas y al final nos creará el fichero package.json con la configuración básica del proyecto.

Por cierto, este fichero está en formato JSON, haz click en qué es JSON para conocer todos los detalles, y incluso puedes validar datos json también.

 

npm también permite instalar módulos que se pueden usar en el proyecto. Existe un modo global (npm -g) que instala los módulos para que todos los proyectos puedan usarlos.

Vamos a crear un fichero de texto que contendrá el código fuente del servidor web.

Crearemos dentro de la carpeta servidor-web-nodejs un fichero editando con vi servidor.js y escribiremos el código siguiente:

var http = require('http');
function handleRequest(request, response){
    response.end('Correcto!: ' + request.url);
}
var server = http.createServer(handleRequest);
server.listen(8888, function(){
    console.log("Arrancado y escuchando en el puerto 8888");
});


La función handleRequest se invoca cada vez que el servidor recibe una petición HTTP.

En esa función, a partir del objeto request podemos obtener el método (GET, POST), la url, los headers (como el user-agent). El objeto response maneja la respuesta y podemos fijar entre otras cosas el código de estado (404, 500), los headers (con Content-Type), incluso escribir el cuerpo del mensaje con código html con la función write y end

Volviendo al ejemplo, una vez tengamos el fichero listo, lo grabaremos y desde la misma consola de Linux escribiremos nodejs para ejecutarse:

nodejs servidor.js


A continuación se nos mostrará una linea por la pantalla:

Arrancado y escuchando en el puerto 8888 
Eso nos indicará que el proceso está ejecutándose y listo para aceptar peticiones http.
Con lo que a continuación abriremos un navegador web, desde dentro o desde fuera de la máquina virtual, y escribiremos:
 
http://IP:8888 donde la IP es la dirección IP de la máquina virtual. 
O desde dentro de la máquina virtual sería http://localhost:8888
 
Nos mostrará la pantalla:

navegador servidor nodejs ok

 
Hay gente que prefiere testear la conexión dentro del mismo terminal Linux, para ello suelen usar curl http://localhost:8888. Ese comando devuelve el código HTML y permite hacer un checkeo rápido de la respuesta del servidor.
 
Bastante impresionante no? Y aún nos han sobrado unos minutos! 
Con este ejemplo, podemos ejecutar un servidor HTTP básico, que es el bloque principal de una aplicación Nodejs, pero obviamente no dispondremos de demasiada funcionalidad...

Para completar un poco el ejemplo vamos a continuar implementando una funcionalidad que llamaremos enrutador. Este objeto nos permitirá gestionar la petición cuando se reciba en el servidor, para luego poder implementar funcionalidades del estilo: servir páginas html, css, imágenes según lo que nos indiquen en la URL.

Para ello tendremos que instalar el módulo httpdispatcher. Si no tenemos instalado ningún manejador de paquetes para node.js, tendremos que instalar uno (npm) con :

sudo apt-get install npm
 
A continuación usaremos npm para descargar e instalar el módulo httpdispatcher que es el que necesitaremos para crear el enrutador
Dentro del directorio servidor anteriores, escribiremos:
 
npm install httpdispatcher


Nos sacará la siguiente salida:

(desactualizado! las versiones van cambiando)
npm http GET https://registry.npmjs.org/httpdispatcher
npm http 200 https://registry.npmjs.org/httpdispatcher
npm http GET https://registry.npmjs.org/httpdispatcher/-/httpdispatcher-1.0.0.tgz
npm http 200 https://registry.npmjs.org/httpdispatcher/-/httpdispatcher-1.0.0.tgz
npm http GET https://registry.npmjs.org/mime
npm http 200 https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/mime/-/mime-1.3.4.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.3.4.tgz
httpdispatcher@1.0.0 node_modules/httpdispatcher
└── mime@1.3.4

 

Perfecto, ahora ya podremos usar este módulo en nuestro servidor. 
Vamos a hacer que cuando se pida la raíz de la URL se devuelva la página index.html.  
Podéis usar cualquier código html, por ejemplo este:

<html>
<head> </head> <body> <h1>Hola mundo!!</h1> </body> </html>

El código del fichero servidor.js quedaría de la siguiente manera:

var http = require('http');
var  HttpDispatcher = require('httpdispatcher');
var enrutador = new HttpDispatcher(); //actualizado nueva versión var fs = require('fs'); //maneja una petición function handleRequest(request, response){ console.log("Peticion:"); console.log(request.url); enrutador.dispatch(request, response); } //creamos el servidor y lo ponemos a escuchar en el puerto 8888 var server = http.createServer(handleRequest); server.listen(8888, function(){ console.log("Arrancado y escuchando en el puerto 8888"); }); //creamos la función que trata un GET de la raiz en el enrutador //para que cargue el fichero index.html y lo devuelva en la respuesta enrutador.onGet("/", function(req, res) { var retHtml = function(content) { res.writeHead(200, {'Content-Type': 'text/html'}); res.end(content, 'utf-8'); } var retError = function(code, content) { res.writeHead(code, {'Content-Type': 'text/plain'}); res.end(content); } fs.readFile('./index.html', function(error, content) { if (error) { retError(500); } else { retHtml(content); } }); });

 Hemos añadido también el módulo fs que sirve para tratar ficheros, para poder leer el contenido del index.html
Una vez tengamos el fichero listo, lo grabaremos y desde la misma consola de Linux escribiremos nodejs para ejecutarse:

nodejs servidor.js


A partir de ahí, a continuación abriremos un navegador web, desde dentro o desde fuera de la máquina virtual, y escribiremos:

 
http://IP:8888 donde la IP es la dirección IP de la máquina virtual. 
O desde dentro http://localhost:8888
 
Nos mostrará la pantalla:



servidor web nodejs hola mundo


Con este ejemplo damos por finalizado el tutorial de node.js para aprender como programar un servidor web muy básico.
 

Si estás interesado en aprender a programar en Node.js, te recomendamos uno de los mejores cursos de programación de Node.js Express y MongoDB.


Existen un montón de módulos para NodeJS que nos van a facilitar el trabajo, y nos permitirá centrarnos en el negocio de nuestra aplicación.
Hemos visto que es relativamente rápido y fácil de usar, sobretodo conociendo de antemano Javascript del lado del cliente.

 

 

javascript

 

 

Valoraciones

Media de 4.9 sobre 5   (24 valoraciones)

 

Comentarios

Nuevo comentario
JC comentó el 2018-5-28
 2 
NO es un FRAMEWORK, y sus creadores desde hace años están peleando por que no se le de esa calificación....