Sie sind auf Seite 1von 17

Node JS

Node JS es un intérprete Javascript del lado del servidor que cambia la noción de cómo
debería trabajar un servidor. Su meta es permitir a un programador construir aplicaciones
altamente escalables y escribir código que maneje decenas de miles de conexiones
simultáneas en una sólo una máquina física.

Instalación

Para empezar a probar cosas con Node simplemente debemos ir a su página y descargarlo
(http://nodejs.org/)

Una vez instalado vamos a abrir la consola de comandos, si es en Windows, se debe ir a


Inicio -> Todos los programas -> Accesorios -> Símbolo de sistema, y una vez dentro
vamos a escribir el comando:

Node

Una vez ingresen a la consola ponemos un mensaje de prueba

"Hola mundo"
Si todo ha salido bien, entonces significa que Node funciona correctamente en nuestro
sistema y desplegará el mensaje. El servidor Node JS, también se puede verificar creando
un bucle que imprima los primeros números naturales

for (var i=0; i<10; i++) {

console.log('hola mundo ' + i);

Podemos utilizar la función setTimeout(), que nos sirve para ejecutar instrucciones con un
retardo expresado en milisegundos.

setTimeout(function() {

console.log('Hola NodeJS');

}, 3000);

setInterval() que ejecuta un código cada un intervalo de tiempo, también en milisegundos.

setInterval(function() {

console.log('Hola NodeJS');

}, 1000);

Para salir de la consola, debes presionar ctrl + D.

Ejecución de archivos JavaScript

Si hacemos una inevitable comparación de Node con PHP, para programar en nuestra
máquina debemos instalar algún intérprete Apache, como Xampp por ejemplo, una vez
instalado ya tenemos listo nuestro servidor para a crear nuestros proyectos. Esto en Node.js
funciona de forma diferente, ya que aquí nosotros tendremos que crear nuestro propio
servidor.
En Windows, Node debería haberse instalado en C:\Program Files\nodejs, si no es así
entonces se debe buscar la ubicación en donde se realizó la instalación dentro de la carpeta
Nodejs.

En la carpeta nodejs , creamos otra carpeta llamada holamundo. Luego vamos a entrar
en ésta y creamos un archivo con extensión .js llamado holamundo.js. Y este archivo
vamos a editarlo con el siguiente código:

Ahora vamos a abrir nuevamente la consola de comando y vamos a entrar dentro de la


carpeta holamundo con el comando cd y la ubicación al mismo, en mi caso:

cd C:\Program Files\nodejs\holamundo

ahora ya estamos ubicados dentro de nuestro primer proyecto Node.js.

Una vez dentro vamos a compilar el archivo que acabamos de crear con el
comando node y el nombre del archivo:

node holamundo.js

Si todo ha salido bien la consola te responderá con el mensaje: ‘El servidor esta
funcionando correctamente en http://localhost:3000/’

Y ahora para probar que nuestro servidor en serio está funcionando correctamente vamos
a abrir un navegador cualquiera y escribir la siguiente dirección:

http://localhost:3000/
Si todo ha salido bien aparecerá el mensaje “Hola mundo”

Ahora vamos a analizar las líneas del código que acabamos de escribir:

var http = require('http');

Incluimos el módulo http, el cual nos permitirá procesar y responder mensajes de un


servidor web. A su vez esa variable http es un objeto que tiene un método, o mejor dicho
un evento.createServer() que recibirá como parámetro una función Callback, osea una
función que se disparará cada vez que haya una petición nueva en nuestro sitio. De esta
manera nosotros debe quedar claro que al protocolo http le asignamos un evento que
escucha, que vigila cada petición, que entra y ejecuta una función anónima:

Esta función a su vez recibirá dos parámetros, uno será el request o petición, un objeto
que contendrá información como por ejemplo la url que está visitando el cliente, y un
segundo parámetro que también es un objeto que nos permitirá responder al navegador.

Con el método writeHead() definiremos la salida 200 con un texto plano, osea sin html, ni
nada, sólo texto:

respuesta.writeHead(200, 'text/plain');

Mientras que .end():

respuesta.end('Hola mundo.');

Nos servirá para finalizar la respuesta con el texto que finalmente leerá el navegador.

Además debemos indicarle mediante al método listen() el puerto y la url en dónde


escuchará la petición nuestra aplicación:

.listen(3000, '127.0.0.1');
En nuestro caso el puerto 3000 y la dirección 127.0.0.1.

Si en cambio quisiéramos devolver una salida HTML en lugar de texto plano deberíamos
reemplazar:

respuesta.writeHead(200, 'text/plain');

respuesta.end('Hola mundo.');

Por algo como esto:

Aquí la cabecera que devolverá el servidor al navegador será mediante código html:

respuesta.writeHead(200, 'text/html');

Y obviamente el código html que podrá interpretar el navegador del cliente. El código
finalmente quedará:

Ahora vamos a volver a la consola y vamos a escribir ctrl + C para detener nuestro
servidor y una vez más vamos a escribir:

node holamundo.js

Al visitar nuevamente la dirección:

http://localhost:3000/

Veremos nuevamente un ‘Hola mundo’ pero con código Html.


Peticiones GET con Node JS

Algo bastante útil a la hora de recoger datos en una petición, en una página web, son las
variables de tipo GET. Variables que son visibles en la url lo cual nos permite por ejemplo
darle un aspecto de tipo dinámico a la misma, por ejemplo un buscador, en donde se
recuperan variables dependerán de los valores que se pasen por la url.

Una URL con una variable de tipo GET tiene un aspecto como éste:

http://mipagina/?productos=zapatos

En este caso nuestra página recuperará una variable llamada productos con un valor
“zapatos”.

Incluso la URL puede recuperar más de una variable por ejemplo:

http://mipagina/?productos=zapatos&color=negro

Vamos a crear tres grupos de animales: aves, mamíferos y reptiles y los mostraremos en
un combo y al seleccionar uno nos devolverá un listado de animales que pertenecen al
mismo.
Para ello vamos a crear una carpeta nueva dentro de nuestros proyectos y dentro un archivo
index.js y un directorios llamado módulos, y dentro de este último un archivo llamado
animales.js

El archivo animales. Js, debe quedar de la siguiente forma


Analicemos el código. En primer lugar creamos un json con el listado de categorías y
animales:

var lista = { 'aves': new Array('Loro' , 'Canario'),


'mamiferos': new Array('Perro' , 'Caballo' , 'Tigre'),
'reptiles': new Array('Cocodrilo', 'Tortuga', 'Iguana') };

Luego creamos una función llamada dibujarCodigoHtml() que nos devolverá un código
html con un formulario que dentro tendrá un combo y un botón para enviar el formulario:

function dibujarCodigoHtml(grupo){
var html = '<!DOCTYPE html>';
html += '<html>';
html += '<head>';
html += '<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">';
html += '</head>';
html += '<body>';
html += '<form action="">';
html += '<label> Seleccione el tipo de animal: </label>';
html += '<select name="grupo"> ' + listarGrupos(grupo) + '
</select>';
html += '<input type="submit" value="Listar" />'; html +=
'</form>';
html += listarAnimales(grupo);
html += '</body>'; html += '</html>';
return html; }

A su vez dentro de ésta se llamarán a otras dos, listarGrupos(), que recibirá como
parámetro el grupo actual y nos devolverá un listado con todos los grupos:

function listarGrupos(grupo){
var html = '<option value=""> --- </option>';
var selected;
for (var item in lista) {
selected = (item == grupo) ? 'selected="selected"' : '';
html += '<option '+selected+' value="'+item+'"> ' + item +
' </option>';
}
return html;
}

Y una función llamada listarAnimales() que también recibirá como parámetro el grupo y
buscará los animales que haya en ese grupo.

function listarAnimales(grupo){
var html = '';
if(lista[grupo] != undefined){
html += '<ul>';
for (var i in lista[grupo]) {
html += '<li>' + lista[grupo][i] + '</li>';
}
html += '</ul>';
}
return html;
}
Finalmente exportamos la función dibujarCodigoHtml() para que pueda llamarse desde
el objeto al que se la ha exportado el módulo:

exports.dibujarCodigoHtml = dibujarCodigoHtml;

Para probar la aplicación, es necesario activar el servidor (index.js) desde la consola

En el navegador se activa se obtiene el JSON con los servicios

Peticiones POST con Node JS

La diferencia entre enviar formularios por GET a enviarlos por POST radica, que mediante
el primero estos serán visibles en la URL, mientras que por POST estarán ocultos. Enviar
un formulario GET sería muy útil para por ejemplo un buscador, ya que luego podría
copiarse esa URL para recuperar la búsqueda. Mientras que POST sería útil para un
formulario de Login por ejemplo, ya que esos datos no deberían mostrarse en la URL al
enviar el formulario.
El servicio mensajes.js debe tener la siguiente estructura

El servidor debe configurarse de la siguiente forma:


Si la petición ha venido por el método POST:

if(peticion.method == 'POST')

Osea si se ha enviado el formulario. Luego recuperamos los datos enviados desde el


formulario mediante el evento on() y el valor ‘data’:

var data_post = '';


peticion.on('data', function(datos_recibidos){
data_post += datos_recibidos;
});

Iremos concatenando dentro de la variable data_post los valores que ha enviado el


usuario desde el formulario. Esta variable finalmente tendrá un valor string con este
aspecto:

nombre=Diego & mensaje=Hola


Sin embargo, lo más cómodo para tratar este tipo de datos es por ejemplo convertir todo en
un objeto json donde nombre y mensaje sean propiedades del mismo con los valores
“Diego” y “Hola” respectivamente. Algo como esto:

{nombre: "Diego", mensaje: "Hola"}

Por eso, una vez recuperados los datos utilizamos el evento on() nuevamente pero con el
valor ‘end’, osea cuando ha finalizado:

peticion.on('end', function(){
var data_post_objeto = querystring.parse(data_post);
mensajes_lista.push({nombre: data_post_objeto.nombre,
mensaje: data_post_objeto.mensaje});
respuesta.writeHead(200, {'Content-Type': 'text/html'});
respuesta.end(mensajes.dibujarCodigoHtml(mensajes_lista));
});

Y convertimos los datos en un json gracias al método parse() del objeto querystring: y lo
guardamos en la variable data_post_objeto.

var data_post_objeto = querystring.parse(data_post);

Y finalmente guardamos una nueva posición dentro del array mensajes_lista para
mostrar todo por pantalla:

mensajes_lista.push({nombre: data_post_objeto.nombre, mensaje:


data_post_objeto.mensaje});

Al probar nuestra aplicación, debemos correr nuestro servidor desde la consola:


Y ejecutamos el servicio desde el puerto 3000

Express

Express es un Framework que nos permitirá acceder a las funcionalidades que nos provee
Node, pero en forma mucho más fácil y rápida.Node es autosuficiente, es decir que al igual
que otros lenguajes de programación como PHP, no necesita de un framework, no tiene un
límite, y todo lo que podemos hacer con un framework, lo podemos hacer sin éste. Sin
embargo, para agilizar los tiempos de desarrollo de aplicaciones basadas en este tipo de
arquitecturas, es de mucha importancia utilizar un framework que nos agilice el trabajo.

Instalación

Vamos a entrar dentro de nuestra carpeta de nodejs, por ejemplo en de los usuarios
Windows, debería estar en la siguiente ruta “C:\Program Files\nodejs”:

cd C:\Program Files\nodejs

Y en esa carpeta ingresamos la siguiente instrucción:


npm install -g express

Listo, ya tenemos Express en nuestro sistema.

Crear un nuevo proyecto

Como todo framework, Express presenta un esqueleto con directorios que nos permitirán
separar las distintas funcionalidades del sistema como por ejemplo las vistas. Para instalar
ese árbol de directorios, vamos a posicionarnos dentro de la carpeta nodejs, y ahí dentro
vamos a crear una nueva carpeta a la que yo voy a llamar: “proyecto1”

Vamos a entrar dentro de esa carpeta:

cd proyecto1

Y vamos a escribir desde la consola lo siguiente:

express

Una vez creado el esqueleto nos informará que sería bueno instalar también las
dependencias

npm install

Ya con nuestro proyecto instalado podemos iniciarlo. Si entramos ahora dentro del mismo
veremos que hay un archivo llamado app.js. Éste es nuestro archivo principal, así que
vamos a compilarlo:

node app.js

Posible error de puerto

La aplicación por defecto escuchará en el puerto 3000, sin embargo, puede ser que en el
sistema de este puerto esté ocupado por otro programa, y entonces devolverá un error por
consola. Para solucionar esto vamos se debe editar ese archivo app.js, y vamos a buscar
la línea:

app.set('port', process.env.PORT || 3000);


Vamos a modificar ese puerto: 3000, por otro, por ejemplo 8888 u otro puerto que no esté
ocupado, y vamos a volver a compilar el archivo app.js desde la consola.

Una vez compilado el archivo, vamos a abrir un navegador y a ingresar la siguiente


dirección:

http://localhost:3000/

(Si cambiaste el puerto 3000, también tendrás que hacerlo aquí)

Posible error de doctype

En algunos casos, se muestra por pantalla un mensaje de error con algo como: “doctype 5`
is deprecated, para solucionarlo , se debe editar el archivo dentro de nuestro proyecto a
view -> layout.jade y buscar:

doctype 5

Y vamos a reemplazarlo por:

doctype

Ahora, al recargar la página debería aparecernos el mensaje: “Welcome to Express”

El archivo que hemos modificado layout.jade, es un archivo de plantilla. Express utiliza un


motor de plantillas llamado jade, que nos permitirá escribir código html de una forma mas
sencilla.

Para hacer una pequeña prueba, vamos a editar este archivo y vamos a buscar las
siguientes líneas:

app.get('/', routes.index);
app.get('/users', user.list);

Aquí por defecto la aplicación está definiendo dos acciones mediante el evento get().
Acciones que podrán ser accedidas desde la página principal y el path ‘/users’. Vamos a
crear nuestra propia acción agregando debajo de esas líneas lo siguiente:
app.get('/prueba', function(req, res){
res.send('Acción de prueba'); });

Como vemos, el evento .get() recibirá dos parámetros, el primero es el path y el segundo
un callback, que se disparará cada vez que un usuario ingrese a esa dirección. A su vez
este callback recibirá dos parámetros, el primero es la petición y el segundo la respuesta.

Vamos a volver a compilar el archivo app.js, y a ingresar a la dirección:

http://localhost:3000/prueba

Aquí veremos el texto que enviamos mediante el evento send() del objeto res, la
respuesta al navegador.