Documente Academic
Documente Profesional
Documente Cultură
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/)
Node
"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
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(function() {
console.log('Hola NodeJS');
}, 1000);
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:
cd C:\Program Files\nodejs\holamundo
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:
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');
respuesta.end('Hola mundo.');
Nos servirá para finalizar la respuesta con el texto que finalmente leerá el navegador.
.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.');
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
http://localhost:3000/
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”.
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
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;
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
if(peticion.method == 'POST')
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.
Y finalmente guardamos una nueva posición dentro del array mensajes_lista para
mostrar todo por pantalla:
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
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”
cd proyecto1
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
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:
http://localhost:3000/
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
doctype
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.
http://localhost:3000/prueba
Aquí veremos el texto que enviamos mediante el evento send() del objeto res, la
respuesta al navegador.