Node.js, MongoDB y redis – carrito de la compra

shoppingcart

En este tutorial vamos a ver como implementar un carrito de la compra. Para ello utilizaremos:

  • un servidor node.js con Express
  • una base de datos no-relacional de tipo clave-valor como es redis, para almacenar el carrito de forma termporal con tiempo de expiración y varias líneas de pedido (más info sobre redis)
  • una base de datos no relacional como es MongoDB para guardar el carrito una vez se realice la compra (más info sobre MongoDB) y mongoose

Partimos de una API RESTful que implementa los casos CRUD para una tienda de camisetas y que ya vimos en entradas anteriores. También podemos partir de la misma aplicación a la que añadimos el servicio “what’s hot now”

Lo que haremos será lo siguiente:

  • Crear un modelo carrito
  • Crear los servicios para:
    • añadir producto al carrito; el carrito se almacena en un hash en redis; en dicho hash habrá muchos productos (líneas de pedido); tiene tiempo de expiración de 5 minutos
    • ver el carrito; básicamente es ver los productos (líneas de pedido) que hay el el hash; las líneas de pedido tienen la id del producto y una cantidad
    • eliminar un producto del carrito; es eliminar una línea de pedido del hash
    • realizar compra; guarda el carrito con sus líneas de pedido en mongo
    • ver carritos que ya se hayan completado y estén en mongo Continue…

Node.js +Cluster

macCluster

Durante las últimas semanas, he estado jugando con Node.js, MongoDB y Redis. Con el fin de seguir mejorando mis capacidades en BackEnd, en los últimos días también he estado trasteando con el módulo Cluster de Node.js.  Este módulo realmente mejora la cantidad de carga que Express pueden manejar. Los resultados han sido asombrosos.

El módulo Cluster es bastante fácil de utilizar si estás acostumbrado a trabajar con el Node, pero me gustaría compartir mi experiencia a través de un sencillo tutorial esperando que pueda ser de ayuda a la comunidad.

Vale… pero… ¿Qué hace un Cluster?

Node.js corre en un solo hilo. Aunque es muy rápido en la mayoría de los casos, es inútil no utilizar el resto de procesadores si estos  están disponibles. El módulo Cluster permite crear una pequeña red de procesos separados que pueden compartir los puertos del servidor, con lo que podemos aprovechar toda la potencia de nuestro servidor. Dicho de otra forma, es muy útil para aprovechar las ventajas de los sistemas multi-core, ya que podremos poner en marcha un conjunto de procesos de Node para manejar la carga.

¿Cómo funciona?

Uno de los secretos a voces de node.js es que adopta muchos principios de Unix, llevándolos a su propio terreno. En este caso la creación de procesos es muy similar al modelo de Unix: un sencillo fork() crea una copia del proceso actual. A partir de ese momento el primer proceso se convierte en maestro o master, y la copia en un trabajador o worker. Es similar a cómo funcionan nginx o Apache, y a otros programas multi-proceso Linux.

Untitled drawing Continue…

Node.js Async

why

Ultimamente he estado desarrollando backend en Node.js y he encontrado algunos problemas, sobretodo al hacer llamadas a la base de datos dentro de un loop. De hecho he tenido que utilizarlo al montar un servicio “what’s hot” con node.js y redis.

Node.js se ejecuta en un solo ciclo, donde hay eventos en bucle, y aprovecha las llamadas asincrónicas para hacer varias cosas, como las operaciones de E/S. Mientras que otros lenguajes envían una consulta a la base de datos y esperan hasta recibir el resultado, Node.js no. Cuando se envía una consulta de base de datos, Node.js continuará ejecutando el código que viene después, y luego salta hacia atrás cuando el resultado está disponible.

Continue…

Node.js + redis. Implementando un “what’s hot” con tiempo de expiración

node_redis

 

En este tutorial vamos a ver como implementar un servicio “what’s hot” utilizando un servidor node.js y una base de datos no-relacional de tipo clave-valor como es redis. ¿Qué hace este servicio? Simplemente nos devuelve las camisetas más vistas durante el último día.

Partimos de una API RESTful que implementa los casos CRUD para una tienda de camisetas y que ya vimos en entradas anteriores. Lo que haremos será lo siguiente:

  • Accedemos a ver una camiseta GET /tshirt/:id
  • Al acceder, guardaremos en una BD redis una clave cuyo valor será el número de accesos que ha tenido la camiseta. La clave tendrá la siguiente forma: hot.id => 4. Además, la clave tendrá un tiempo de expiración de 86400 segundos, es decir, de un día.
  • Si queremos conocer las camisetas más vistas en el último día, accederemos a /hots con el método GET, y obtendremos las “camisetas calientes”.

Si queréis podéis consultar en SpeakinBytes información sobre redis.

Continue…

API REST con Node.Js, Express, MongoDB y moongose.js

RESTfulAPI

En este artículo/tutorial  explicaremos como construir una API REST usando para ello Node.js y Express.js, junto con  MongoDB y el plugin para conectarnos a ella y mapear los modelos Mongoose.js.

El ejemplo en el que trabajaremos será el de una tienda online de camisetas. En principio, vamos a crear una aplicación que cumpla los casos CRUD (Create/Read/Update/Delete) para ver/crear/editar/borrar las camisetas de la tienda.

El proceso será el siguiente:

  • Montar el servidor Node.js junto con Express
  • Crear el modelo de las camisetas en MongoDB
  • Conectarnos a la base de datos
  • Construir la RESTful API implementando los casos CRUD
  • Probar que todo sirve utilizando Postman

En una futura entrega veremos algunos extras, como son:

  • Error handling
  • Buenas prácticas en nuestro código
  • Búsquedas con filtros

Continue…