Inicialmente marqué como límite para desarrollar la app en 60 días, contaba con días trabajados, pero en el blog he sacado posts cada día, incluyendo los días no trabajados.
Menos mal que esto no se lo prometí a Chuck Norris.
Voy a invertir todos mis esfuerzos para poder publicar la app antes de Mayo.
NODEJS
Como ya sabéis los que estáis siguiendo el blog, la parte de servicios la desarrollo en nodejs.
Para los que no conocéis como funciona os explico un poco. A grandes rasgos, esto es cero tutorial.
La parte de servidor se implementa en JavaScript, y toda aplicación desarrollada en nodejs tiene un punto de entrada, un fichero index.js o como queráis llamarlo, chuck_norris.js.
A la aplicación le acompaña un fichero package.json donde especificamos el archivo que será el main y que módulos va a emplear.
Los módulos pueden ser clases, funciones, frameworks previamente desarrollados por compañías u otros usuarios, para facilitar nuestra existencia.
Yo empleo principalmente los siguientes módulos: express, aws-sdk, mysql, gcm, body-parser y morgan.
Mi servidor (aplicación nodejs) se divide en varios archivos javascript:
index.js: es el main, donde se define el puerto del servidor y aunque a veces por volumen suele estar separado, aquí también defino los handlers para cada formato de url. Esto significa las funciones que se ejecutan cuando se realiza una petición a una url específica.
Algo tipo si entras en la dirección "dominio/listado_posts" llama a una función que se conecta a la base de datos y devuelve un listado con los posts en JSON.
db.js: crea el pool de conexiones mysql y tiene las funciones para insertar, actualizar y consultar la base de datos.
cache.js: realiza las consultas a la cache de redis, es la capa que está por encima de la base de datos.
email.js: emplea el módulo aws-sdk, para enviar emails de creación de cuenta y de recuperación de cuenta a los usuarios.
gcm.js: realiza las notificaciones de tipo push a los dispositivos móviles, empleando Google Cloud Messaging.
api/"servicios de una tipología".js: tengo varios ficheros dentro de la carpeta api, cada uno para gestionar un tipo de dominio de datos de la aplicación. Por ejemplo account.js gestiona la creación de cuentas, actualización, autenticación y eliminación.
Los servicios simples suelen dividirse en dos funciones un handler y un callback.
El handler es la función que se llama tal y como el servidor parsea la petición del cliente y detecta que la url dispone de una función para manejar la petición y dar una respuesta.
app.post('/account/0', function (req, res) {
api_account.handlerNewAccount(req, res);
});
Recibe como parámetros los objetos request y response. Request contiene los parámetros enviados por el cliente en la petición y Response es el objeto que empleamos para dar respuesta.
Una función callback dicho llanamente, es una función que pasamos como parámetro a otra función para que sea ejecutada en un momento determinado por ejemplo cuando finalice una llamada a la base de datos, el envío de un correo, una notificación push a un cliente, etc.
El concepto creo que es más fácil mediante un ejemplo.
function insert(callback, req, res){
pool.getConnection(function(err, connection) {
connection.query('INSERT INTO account SET ?',
{email: req.body.email, password :req.body.password},
function(err, result) {
callback(err,result,req,res);
connection.release();
});
});
}
En ejemplo podéis ver una función para insertar un registro en la base de datos, si os fijáis paso como parámetro la función callback y los objetos request y response.
Aquí os pongo más o menos como sería básicamente la función callback que sería llamada al finalizar el insert en la base de datos.
function callbackNewAccount(err, result, req, res){
if(err){
res.json(err.errno);
}else{
res.json(result.insertId);
email.sendWelcomeEmail(req.body.email);
}
}
La función es llamada cuando la base de datos ya ha insertado el registro, y recoge como parámetro el resultado del query a la base de datos.
El handler que desencadena el insert sería algo parecido a esto:
function handlerNewAccount(req, res){
db.insert(callbackNewAccount, req, res);
}
Hay algunas partes más, pero básicamente la parte de nodejs está estructurada así.
Existen infinitas configuraciones posibles, cada cual más coherente, loca o absurda.
En Internet tenéis varios trillones de ejemplos básicos, tipo hello world en nodejs.
Cuando tenga un rato subiré a GitHub mi versión de HelloWorld particular.
No hay comentarios:
Publicar un comentario