sábado, 3 de enero de 2015

Tutorial Node.js: Intermedio


​ En este tutorial trataremos la conexión de Nodejs con un manejador de base de datos, pero primero ¿qué es una base de datos?

Una base de datos es un conjunto de datos almacenados para su posterior uso. Para poder acceder a estos y manipularlos usamos un manejador de base de datos, entre los más populares están: Oracle, Microsoft SQL Server, MySQL, PostgreSQL y SQLite.

Por motivos de tutorial trataremos SQLite, lo considero el más pedagógico y fácil de usar para desarrollo. Dentro de su carpeta de proyecto pueden instalarlo de 2 formas:
  • Podemos usar el archivo package.json y especificar la librería a usar.
    Y para instalarlo ejecutamos en la carpeta del proyecto el comando: npm install. Para más información del manejo de librerías con package.json pueden consultar este enlace.
  • La segunda opción que tenemos es instalar la librería manualmente con el comando: npm install sqlite3.
Ambas posibilidades crearan en la carpeta de nuestro proyecto una carpeta llamada node-modules, en esta se encuentran cada librería que usemos.

Para ejecutar el proyecto necesitamos al igual que antes situarnos en la carpeta donde se encuentra nuestro archivo y ejecutar desde la consola: node <nombre_de_archivo.js>. En tutorial no tendremos un servidor en ejecución, simplemente haremos operaciones con una base de datos. La integración de este código con uno que incluya un servidor en ejecución podemos llegarla hacer satisfactoriamente por nuestra cuenta, sin embargo en ese punto es donde entran en juego los frameworks web, los cuales harán todo ese trabajo por nosotros de una forma que nuestro proyecto sea legible, escalable y robusto.

1 - Creación de base de datos y consulta

SQLite a diferencia de otros manejadores de base datos se almacena en un solo archivo, es por eso que en el código vemos en la línea 5 un parámetro con el nombre del archivo que deseamos crear/cargar. Otros manejadores de base de datos tienen acceso restringido con administración de usuarios por contraseña y privilegios de uso.

Una base de datos en SQLite tiene una forma de representación de almacenamiento por tablas, donde los atributos están ordenados por columna y una sola instancia se ve representada por una fila. Para ilustrar esto mejor se tiene la siguiente foto, la cual es una vista de una extensión de Mozilla Firefox SQLite Manager.


En este caso tenemos una tabla que se llama personas y tiene como atributos el identificador, nombre y apellido.

Para hacer las operaciones sobre la base de datos usamos la función run, esta ejecuta el string que se le pase como parámetro. Las funciones en la base de datos que vemos en este ejemplo son:
  • Creación de tabla: Esta tiene como sintaxis básica CREATE TABLE [IF NOT EXISTS] <nombre_tabla> (<nombre_de_atributo> <tipo_de_atributo> [,<nombre_de_atributo> <tipo_de_atributo>]).
  • Insertar instancia: Permite crear una instancia dentro de la tabla y tiene como sintaxis básica: INSERT INTO <nombre_tabla> VALUES (<valor>[,<valor>]). Para el ejemplo vemos que se hace uso además de la función prepare, la cual permite realizar estas operaciones de inserción con menos código. Lo más importante de usar esta función de inserción es el orden de los atributos, ya que deben ser colocados en la misma posición en la que se creo la tabla.
  • Realizar consulta: Esta función permite seleccionar de la base de datos los valores. La sintaxis básica que posee es: SELECT (* | <nombre_de_atributo> [AS <nombre_de_alias>] [, <nombre_de_atributo> [AS <nombre_de_alias>]]) FROM <nombre_tabla> [,<nombre_tabla>] [WHERE <condición> [, <condición>]]. Para el ejemplo tenemos la función each que ayuda a manipular cada valor que resulte de la consulta.
2 - Acceder, tipos de atributos, crear y eliminar tablas

En este ejemplo ya se asume que tienes una base de datos creada, además hago uso de unas buenas prácticas de código, para la lectura segura del archivo, esto se encuentra desde la línea 1 hasta la línea 10. Con respecto a la carga de la base de datos no existe mucha diferencia al compararlo código del ejemplo anterior.

Además quería ilustrar en este ejemplo el uso de varios tipos de valor y los más usados:
  • INTEGER: Representa a los valores de tipo entero.
  • TEXT: Representa a los valores de tipo string.
  • DATE: Representa fechas y horas.
  • REAL: Representa valores de tipo punto flotante.
Ya con esto se puede lograr representar muchas estructuras de gran complejidad, ya que podemos tener tablas que sirvan para expresar relaciones entre tablas, lo cual permite tener una representación de los datos muy robusta.

Además existen dos propiedades en los atributos que son mostradas en este ejemplo:
  • PRIMARY KEY: Permite indicar que el atributo sirve de identificador de la instancia en la tabla.
  • [NOT] NULL: Indica que el atributo debe tener valor en la instancia. Por defecto en SQLite el atributo puede no tener valor.
Otra función que podemos usar es la eliminación de tablas, para ellas usamos la siguiente expresión DROP TABLE <nombre_tabla>.

3 - CRUD

En este ejemplo ya se asume que tienes una base de datos creada.

Existen 4 funciones básicas dentro de una tabla que permiten gran modularidad del código:
  • Create: Crear o insertar instancia. Más sobre la sintaxis de insert: INSERT INTO <nombre_tabla> (<nombre_atributo>[,<nombre_atributo>]) VALUES (<valor>[,<valor>]). La ventaja contra la sintaxis básica es que podemos insertar los valores en el orden que enunciamos los nombres de estos.
  • Read: Consultar o leer instancias. A diferencia del ejemplo 1 tenemos la función all, esta permite tener en una lista todos valores que satisfagan las condiciones. Otros operadores sobre las condiciones son: =, ==, <, >=, >, >=, !=, <>, IN, NOT IN, BETWEEN, IS, and IS NOT.
  • Update: Actualizar instancia. La sintaxis básica es: UPDATE <nombre_tabla> SET <nombre_atributo>=<valor> [,<nombre_atributo>=<valor>] WHERE <condición>.
  • Delete: Eliminar instancias de la tabla. Sintaxis básica: DELETE FROM <nombre_tabla> WHERE <condición>.
Existen muchas otras funciones en las base de datos como ALTER TABLE (agregar o eliminar atributos en la tabla), UNIQUE (atributo o relación única en la tabla), FOREIGN KEY (crea referencia de atributo a otra tabla), ON DELETE CASCADE (al eliminar la instancia que haga referencia, se elimina esta también), entre otros. Para más funciones se puede consultar la página oficial de SQLite.

Si algo no queda muy claro siempre me pueden escribir a mi correo tonylattke@gmail.com o también pueden dejar comentarios al final de este post y trataré de ayudarles lo antes posible.

Descarga aquí todos los archivos fuente.

No hay comentarios:

Publicar un comentario