Amo JavaScript, un lenguaje dinámico capaz de muchas pero muchas cosas; su principal característica es el manejo de callbacks (llamadas a una función de manera asíncrona sin utilizar threads como Java). Hace unos cuantos años el mundo vio nacer node.js: JavaScript para servidores.
Las ventajas de node son varias, empezando por las ya mencionadas callbacks y continuando con el hecho de que ahorra escribir validaciones en múltiples lenguajes; para ilustrar el punto anterior simplemente piensa en un formulario web que tiene que validar que ciertos campos contengan realmente información, y que algunos de ellos (el correo electrónico por ejemplo) tengan que cumplir con cierto formato; en este caso en un sistema escrito en Java, por ejemplo, tendrías que escribir cierta lógica en JavaScript para validar lo que el usuario captura en la página y luego reescribir la misma lógica en Java para que el backend pueda hacer lo propio (toma en cuenta que el lenguaje de backend podría incluso manejar las expresiones regulares para validar formatos de una forma diferente que podría causar que la validación fuera ciertamente diferente).
Sin más vamos al primer ejemplo de código:
var http = require('http');
var MyApp = {
getView: function(viewName, params){
var view = null, headers = null;
switch (viewName){
case 'home':
view = 'Hello world!';
break;
default:
view = null;
break;
}
if (view == null){
headers = 404;
} else{
headers = 200;
}
params.res.writeHead(headers, {"content-type": 'text/plain'});
params.res.end(view);
}
};
http.createServer(function(req,res){
var params = {
"req": req,
"res": res
};
MyApp.getView('home',params);
}).listen(3124);
Para ser bien honesto la primer aplicación publicada aquí tiene demasiadas líneas de código, la mayoría no son necesarias para el tan famoso "Hello world", mi intención en este fragmento es ilustrar también el concepto de aplicación y modularización en JavaScript.
La primer línea (require) invoca a un módulo de node, en este caso es el servidor web como tal; si eres de los que, como yo, tiene experiencia en PHP, .NET, Java, etc; entonces estarás acostumbrado a utilizar Apache, IIS, Tomcat, JBoss, etc como servidores web o application containers; node no require ser contenido en alguno de estos productos pues proporciona su propio servidor web (aunque también puede correr en algún servidor existente).
El objeto MyApp, es en realidad la aplicación que deseamos desarrollar. Ella manejará en algún momento toda esa lógica que usualmente escribimos como parte del backend, en este momento lo único que realiza es administrar la entrega de vistas al servidor (objeto http creado en la primer línea), volveré a este objeto en breve.
Posteriormente tenemos una función "createServer" que toma como parámetros req (request) y res (response), un tanto intuitiva para quienes tenemos experiencia en desarrollo web. Para quienes no tienen experiencia en este campo, un servidor web recibe solicitudes de parte de los usuarios del sistema a través de un request que contiene la información de la página que estás utilizando principalmente (y otra información que no documentaremos aquí a fin de redactar un artículo lo más breve posible); una vez que el servidor recibe esta solicitud, el servidor decidirá en base a ella cuál es el recurso (la página o archivo solicitado) más adecuado y lo devolverá en forma de respuesta (el response). Al final del método createServer notarás la instrucción "listen(3124)", quiere decir que mi servidor responderá por el puerto 3124, en mi caso decidí hacerlo de esta manera dado que en mi equipo tengo en ejecución servidores en los puertos 80 y 8080, pero si no es tu caso puedes cambiarlo a cualquiera de esos puertos.
Con este código ya puedes ejecutar desde la línea de comandos:
node MyApp.js
(donde MyApp.js es el nombre del archivo que contiene el código escrito anteriormente).
Ve a tu navegador e ingresa la url:
localhost:3124
Podrás ver el mensaje "Hello world!" como resultado. Si te has equivocado al copiar el código podrás observar el error en la línea de comandos donde iniciaste la aplicación.
La aplicación MyApp está configurada para responder en este momento únicamente texto, pero puedes modificar los argumentos (como el formato de los headers) para responder de manera distinta.
Con esto concluimos Hello World!
No hay comentarios.:
Publicar un comentario