tadicl-p2
Version:
Servidor Node capaz de tratar peticiones REST y que implementa uso de cache con tiempo establecido
80 lines (67 loc) • 4.21 kB
JavaScript
//Modulo servidor.js
var http = require("http"); //Requiere el modulo http y url (para coger la url escrita por el usuario). Asignamos el resultado del requerimiento a una variable local...
var url = require("url");
var qs = require("querystring"); //Requiere este modulo para parsear el body y obtener las variables y sus valores cuando el request.method, por ejemplo, es POST
function iniciar(route, handle, cache) {
function onRequest(request, response) {
//Tratamiento de Peticiones REST (POST, GET, PUT, DELETE)
if (request.method === "POST") {
var body = "";
request.setEncoding('utf8'); // change to UFT8 encoding
request.on("data", function(data) {
body += data; //Recibimos datos y guardamos en el body para su posterior parseo
});
//Cuando las variables "POST" son totalmente recibidas, request.on("end",function(){}) es ejecutado.
request.on("end", function() {
var variables = qs.parse(body); //Obtengo las variables del formulario introducido mediante ARC.
});
var pathname = url.parse(request.url).pathname; //Parseamos el string de la url....
//Trazas y insercion en cache
console.log("********************************************************"); //Seguimos traza por consola
console.log("- Se ha hecho una peticion por POST a " + pathname); //Seguimos traza por consola
cache.insertar("POST", "datos de POST", 15000); //indice+datos+tiempo de expiracion
console.log('- Elementos en la cache: ' + cache.size() + " elementos.");
}
else if (request.method === "GET")
{
var pathname = url.parse(request.url).pathname; //Parseamos el string de la url....
//Trazas y insercion en cache
console.log("********************************************************"); //Seguimos traza por consola
console.log("- Se ha hecho una peticion por GET a " + pathname); //Seguimos traza por consola
cache.insertar("GET", "datos de GET", 15000);
console.log('- Elementos en la cache: ' + cache.size() + " elementos.");
}
else if (request.method === "PUT")
{
var pathname = url.parse(request.url).pathname; //Parseamos el string de la url....
//Trazas y insercion en cache
console.log("********************************************************"); //Seguimos traza por consola
console.log("- Se ha hecho una peticion por PUT a " + pathname); //Seguimos traza por consola
cache.insertar("PUT", "datos de PUT", 15000);
console.log('- Elementos en la cache: ' + cache.size() + " elementos.");
}
else if (request.method === "DELETE")
{
var pathname = url.parse(request.url).pathname; //Parseamos el string de la url....
//Trazas y insercion en cache
console.log("********************************************************"); //Seguimos traza por consola
console.log("- Se ha hecho una peticion por DELETE a " + pathname); //Seguimos traza por consola
cache.insertar("DELETE", "datos de DELETE", 15000);
console.log('- Elementos en la cache: ' + cache.size() + " elementos.");
}
else
{
console.log("- Request de otro tipo...");
var pathname = url.parse(request.url).pathname; //Parseamos el string de la url....
}
//Una vez tenemos el pathname...
response.writeHead(200, {"Content-Type": "text/html"}); //Tipo de contenido
var content = route(handle, pathname); //Mandamos coleccion de manipuladores y el string parseado...
response.write(content); //Escribimos contenido...
response.end(); //Fin
}
http.createServer(onRequest).listen(5678); //Creamos el server indicando el puerto de escucha: 5678 y recibimos peticion...
console.log("- El servidor esta iniciado"); //Seguimos traza por consola
}
//Exports
exports.iniciar = iniciar;