nodejs

Guardar la sesión en MySQL para el Framework Express en node

Guardar la sesión en la base de datos de MySQL es sencillo utilizando el modulo express-mysql-sessionEsto nos ayuda a mejorar la experiencia de usuario ya que cuando tengamos que reniciar el servidor el usuario no se vera afectado a perder su sesión. 

- Instalamos el modulo: npm install express-mysql-session --save

- Importamos el modulo: 

var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session); //agregamos esta linea

- Agregamos nuestra base de datos MySQL (para abrir la conexion con la base de datos)

var options = {
    host: 'localhost',
    port: 3306,
    user: 'db_user',
    password: 'password',
    database: 'db_name'
};
var sessionStore = new MySQLStore(options);

- Agregamos nuestra variable sessionStore a la configuracion de la session

app.use(session({
	key: 'session_cookie_name',
	secret: 'session_cookie_secret',
	store: sessionStore, //agregamos esta linea
	resave: false,
	saveUninitialized: false
}));

Esto seria todo cuando el usuario inicie sesion se almacera en una tabla llamada sessions creada por el modulo.

Nota: La tabla de bases de datos de sesiones debe crearse automáticamente cuando se utilicen opciones predeterminadas. Si por alguna razón no se ha creado la tabla, el esquema seria este:

CREATE TABLE IF NOT EXISTS `sessions` (
`session_id` varchar(128) COLLATE utf8mb4_bin NOT NULL,
`expires` int(11) unsigned NOT NULL,
`data` text COLLATE utf8mb4_bin,
PRIMARY KEY (`session_id`)
) ENGINE=InnoDB


Share this post

DogJuan - Red social para amantes de mascotas

DogJuan es una red social movil para amantes de mascotas, que les permite interactuar con otros dueños de mascotas, compartir experiencias, consejos e interrelacionarse.

Con DogJuan podras buscar perritos de la misma raza que el tuyo en tu ciudad, perritos con un caracter similar al tuyo ( jugueton, dormilon, nervioso ). Con la aplicacion movil de Dogjuan puedes guardar esos tiernos momentos con tu mascota ... y si ella es algo timida puedes la camara para mascotas que ayuda a fijar su atencion en la camara con algunos sonidos para una mejor foto.

Con DogJuan podras conocer a nuevos dueños en tu ciudad, salir de paseos juntos y muchas cosas mas para hacer feliz a tu mascota.

     



Share this post

Javascript forEach vs for

Cuando necesitas iterar sobre un array de elementos en javascript existe una funcion especifica llamada forEach

arr.forEach(function (item){
  // codigo de trabajo
});

Esta seria la versión educada para iterar y trabajar sobre los elementos de ese array. Sin embargo que tan productiva puede ser  ?

En el benchmark realizado en jsperf, se observa que utilizar forEach puede ser sensiblemente mas lenta ( ok ... muuuucho mas lenta ) que su contraparte, la vieja confiable "for".

La pregunta seria porque es mas lenta ( tan lenta ), para poder responder examinaremos el codigo de la funcion forEach

  Array.prototype.forEach = function(fun /*, thisArg */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
      if (i in t)
        fun.call(thisArg, t[i], i, t);
    }
  };

Primero verificamos que el array no sea null, calculamos la longitud del array y verificamos la funcion de callback exista. Hasta aca, no hay mucho drama, ya que todo eso se realiza solo una vez.

Sin embargo, luego entramos a un elemento for ( si un for dentro del forEach que estamos usando, el mismo for que no quisimos usar en lugar del forEach ). Llegado a este punto uno se siente medio hipster  ... 

Dentro del for ( dentro del forEach ) se debe ejecutar un operador ( i in t ). Donde T es el array e i el indice. Basicame le esta preguntando si el array t tiene el indice i. Y luego de eso llama a la funcion callback pasandole varios argumentos.

Son estos 2 ultimos pasos los que generan toda la lentitud en el proceso del forEach. El costo de hacer la validacion ( i in t ) y el costo de llamar a una funcion ( cada vez que llamamos a una funcion, hacemos que el codigo salte a otra ubicacion en la memoria y eso tiene un costo en tiempo de ejecucion, y si lo hacemos en un for pues el costo se multiplica )

Conclusion: Evita usar forEach, asi tengas un array de pocos elementos ( luego se hace costumbre )

 



Share this post

Dog Juan


  • March 2017


  • Temas:

    • android
    • ios
    • nodejs
    • socket.io
  • Tipo:




Configuracion Nodejs - Websocket - Apache

Al trabajar sobre un proyecto de nodejs siempre necesitaremos un webproxy que enlace el dominio de produccion con el puerto real sobre el cual se esta ejecutando el proyecto.

Por ejemplo, al tener una URL www.gestiondeproyectos.com, el webproxy se encargaria de reconocer el dominio y redirigir la peticion al puerto donde esta corriendo el servicio de node por ejemplo localhost:8000

En este articulo, vamos a ver la configuracion de un proyecto nodejs usando apache2 ( tambien se pueden usar otros servicios como nginx, lighttpd, etc )

 

Habilitar Modulos

  • a2enmod proxy
  • a2enmod proxy_http
  • a2enmod proxy_wstunnel  (WebSocket)

 

VIRTUAL HOST

 Crear o sobrescribir el archivo 000-default.conf en /etc/apache2/sites-available/ . Dentro de <VirtualHost> añadimos lo siguiente:


#Configuracion basica del host
ServerName www.name.local
ServerAlias name.local
ServerAdmin webmaster@localhost
 
#Ruta de acceso a la carpeta de la aplicacion
DocumentRoot /var/www/html/mySite

 

<Directory />
               Options -Indexes +FollowSymLinks
               AllowOverride None
               Require all granted
</Directory>
 

 

#Cofiguracion socket apache
RewriteEngine On
RewriteCond %(REQUEST_URI) ^/socket.io             [NC]
RewriteCond %(REQUEST_STRING) transport=websocket  [NC]
RewriteRule /(.*)             ws://127.0.0.1:8080/$1 [P,L]
 
#Cofiguracion node  apache    
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
 
 <Proxy *>
               Require all granted
  </Proxy>
 
#Espeficamos donde se mostrara la aplicacion
#En este caso se ejecuara en la raiz
   <Location / >
               ProxyPass http://127.0.0.1:8080/
               ProxyPassReverse http://1127.0.0.1:8080/
    </Location>
#Habilitamos los logs
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
 

HABILITAR CONFIGURACION:

sudo a2ensite 000-default.conf    o el nombre de archivo que se creo
sudo a2dissite 000-default.conf (Para deshabilitar)
 

EJECUTAR NODE:

node app.js


Share this post

GPS Control


  • August 2016


  • Temas:

    • android
    • nodejs
  • Tipo:




GPS Control


  • August 2016


  • Temas:

    • android
    • nodejs
  • Tipo:




Node JS

En CleverClouds desarrollamos multiples aplicaciones y MVPs para startups y de todas las plataformas nuestra favorita es por mucho NodeJS. NodeJS tiene un rendimiento superior a PHP

Sin embargo, no podemos incluirlo simplemente como aplicacion dentro de apache. En primer lugar porque apache degradaria el rendimiento de la aplicacion, Y en segundo lugar, porque desde apache no tendriamos acceso a los sockets. ( En NodeJS, podemos  utilizar los sockets para avisar en tiempo real a nuestra aplicacion sobre cambios hechos por otros dispositivos ).

Sin embargo, es muy necesario poder utilizar host virtuales y asi poder ejecutar diferentes aplicaciones en un mismo servidor.

Para logralo vamos a crear una aplicacion que servira de router entre mis aplicaciones basandose unicamente en el nombre de dominio.

var http = require('http');
var httProxy = require('http-proxy');

httProxy.createServer({
    hostnameOnly: true,
    router:{
        'www.dominiouno.com': '127.0.0.1:3330',
        'www.dominiodos.com': '127.0.0.1:3331',
        'www.otrodominio.com': '127.0.0.1:3332',
   }

}).listen(80);



Share this post