Empezando con Node.js y CouchDB

Por Daniel Rodríguez @sadasant.

En los últimos años han habido un par de tecnologías que han causado furor en el campo de servidores web y bases de datos NoSQL. Node.js, creado en el 2009 por Ryan Dahl consiste en un entorno JavaScript basado en el motor V8 del navegador Google Chrome, que no necesita de un navegador web y que permite de manera intuitiva servir aplicaciones web a tiempo real.

CouchDB por otro lado es un proyecto creado el 2005 por la fundación Apache, se trata de una base de datos NoSQL, orientada a documentos, que ha causado mucho interes por su API REST que permite interactuar con ella mediante URLs que retornan su contenido en formato JSON.

La idea es que hoy aprendamos a instalar node.js, el gestor de paquetes de node (NPM) y couchdb, además de hacer una prueba simple de lectura utilizando el cliente couch-client.

1. ¿Cómo instalar Node.js?


Antes que nada, es necesario asegurarnos de que tenemos todas las herramientas de compilación, tal como el compilador gcc, make, libtool, entre otros. En fedora es tan sencillo como instalar el grupo “Development Tools”:

yum groupinstall "Development Tools"

Al tener estas herramientas podemos proceder con la instalación de node.js, para lo cual necesitamos descargar el paquete desde esta URL: http://nodejs.org/#download, o bien seguir las instrucciones en el github de node, en donde indican que para ambientes Linux primero debemos ejecutar:

git clone git://github.com/joyent/node.git
cd node
./configure
make

y luego ejecutar como root:

make install

¡Y listo! Podemos probarlo ahora con:

./node -v # arrojará la versión instalada de node

Para usar node sin entrar a la carpeta donde se instaló, tenemos que entrar a nuestro perfil de bash con:

nano ~/.bashrc

Y añadir la siguiente línea, con la ubicación correcta del programa:

alias node='/home/usuario/ubicacion/de/node-v?.?.??/node'

2. NPM


NPM es un sistema de gestión de paquetes especial para node, que permite instalar módulos desde repositorios externos usando la consola de manera simple y sencilla.

Siempre y cuando tengas node.js podrás instalar NPM ejecutando en la línea de comandos de tu sistema UNIX:

curl http://npmjs.org/install.sh | sh

Puedes ver más detalles sobre el software aquí: https://github.com/isaacs/npm

3. Probando node


Al ejecutar node entraremos a una consola interactiva donde podremos ejecutar comandos de JavaScript.

[user@user folder]$ node
> (1).toString();
'1'

La diferencia entre ese javascript y el de los navegadores es que no existe el DOM (por lo que no existe el objeto document) ni las funciones útiles dentro del navegador (como alert()).

También podemos crear un archivo con código javascript y ejecutarlo con node. Por ejemplo, si escribimos en un documento llamado uno.js el siguiente código:

var uno = (1).toString();
console.log(uno);

Para ejecutarlo haríamos lo siguiente:

[user@user folder]$ node uno.js
'1'

4. Node como servidor web


El sitio web http://www.nodebeginner.org/ provee un tutorial intuitivo y práctico para inicializarnos con node.js. Por ejemplo, una de las cosas que enseña es hacer un servidor web con node, para lo que simplemente necesitamos importar el módulo http y decirle que cree un servidor que responda en algún puerto (en este caso el 8888) y que cuando sea llamado escriba hello world en texto plano, de esta manera:

var http = require("http");

http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
}).listen(8888);

Lo cual, al ejecutarlo con node server.js ya funcionará como un servidor web en la dirección http://localhost:8888/ :)

5. ¿Cómo instalar CouchDB?


Por lo general, en distribuciones linux como Fedora solo tenemos que hacer como root:

yum install couchdb

De no contar con ese recurso, tenemos que asegurarnos de instalar las siguientes dependencias de CouchDB con nuestro gestor de paquetes: icu, libicu-devel, js, js-devel, curl y libtool. Luego procedemos a descargarnos el código fuente desde los repositorios de apache:

svn checkout http://svn.apache.org/repos/asf/couchdb/trunk couchdb

Estamos usando svn como sistema de control de versiones para obtener la última versión de couchdb, svn viene por defecto en muchas distribuciones basadas en UNIX, si quieren descargarse los binarios en un comprimido pueden ir a https://couchdb.apache.org/downloads.html, descargar la versión que les parezca y descomprimirla.

Una vez descargados los binarios de couchdb y descomprimidos, tenemos que entrar y empezar con la compilación:

cd couchdb
./bootstrap
./configure

Luego com root:

make install

Una vez finalizada la instalación, podremos ejecutar:

/etc/init.d/couchdb start

Y entrar a la base de datos con: http://localhost:5984/_utils/index.html

También podemos conseguir una guía de cómo instalarla en Windows en el siguiente enlace: https://wiki.apache.org/couchdb/Installing_on_Windows.

6. ¿Cómo usar CouchDB desde su interfaz web?


Una vez entremos a la interfaz web de couchdb nos aparecerá en la esquina inferior derecha el siguiente texto:

Welcome to Admin Party!
Everyone is admin. Fix this

Indica que todos son administradores, lo cual es recomendable cambiar. Hacemos click en Fix this, nos aparecerá lo siguiente:

Creamos un usuario de ejemplo usuario con clave clave y le damos a crear. Lo siguiente es hacer una base de datos, para ello hay un botón en la parte superior que dice Create Database...; al darle click nos muestra:

Arriba saldrá un botón que dirá New Document, al darle click veremos esto:

Podrás cambiar la id de la base de datos y añadir campos con el botón Add Field, el cual nos permitirá cambiar la id y el contenido del campo recién añadido:

7. Probando CouchDB con Node.js


Una vez tenemos a Node.js, NPM y CouchDB instalados, podremos utilizar NPM para instalar el cliente de CouchDB dentro de node.js:

npm install couch-client

Aquí encontrarán detalles sobre el API de couch-client: https://github.com/creationix/couch-client.

Una vez instalado, el comando ejecutado creará el código necesario dentro del directorio node_modules/couch-client. Para hacer uso de este cliente, creamos un nuevo documento javascript y escribimos:

var CouchClient = require('couch-client');

Y en la variable CouchClient se guardará todo el api que necesitaremos para manipular a nuestra base de datos CouchDB. Con ella obtendremos documentos tan solo pasándole como parámetro la URL del pedido, de la siguiente manera:

var db = CouchClient('http://usuario:clave@localhost:5984/baseDeDatos');

Podríamos dinamizar el proceso creando una función que nos de cualquier base de datos de nuestra CouchDB:

/* getDB( DB )
 * Obtiene la base de datos DB
 * dentro de *nuestro* couchdb
 */
 var getDB = function (db){
   var user = 'usuario'; // usuario de la BDD
   var pass = 'clave'; // clave de la BDD
   var host = 'localhost'; // URL de la BDD
   var url = 'http://'+user+':'+pass+'@'+host+':5984/'+db;
   return CouchClient(url);
 };

var db = getDB("baseDeDatos"); // le pedimos la bdd "baseDeDatos"

En el API de couch-client veremos que, una vez tenemos la base de datos, podemos pedirle cualquier documento utilizando el método get:

db.get( IDdelDocumento, callback );

Para probarlo, crearemos una variable con la ID del documento y otra variable que contenga una función que usaremos como callback, esta función puede simplemente reportar por la consola el contenido del documento, de esta manera:

var key = "28fbda6c0037c5608cecef6b2b0006fb"; // ID del documento
var callback = function (error, documento){ // callback luego de pedir el documento
    console.log(error, documento);
}
db.get(key, callback); // pedimos el documento

Luego ejecutamos:

[user@user folder]$ node prueba_de_couchdb.js
null { _id: '28fbda6c0037c5608cecef6b2b0006fb',
_rev: '1-7316e80a4a688d27bc4cd2fe04916f58',
test1: null,
test2: 'lol' }

El primer null que arroja es el error del callback; a partir de la primera llame { se encuentra el resto del documento extraído de la base de datos.

Para leer sobre el resto de las capacidades del cliente de CouchDB para node pueden visitar su sitio web oficial: http://localhost:5984/_utils/index.html.

Más adelante iremos haciendo otras pruebas con estas tecnologías :) sus comentarios son bienvenidos.

  1. sadasant ha reblogueado esto desde yucazos
  2. yucazos ha publicado esto
Short URL for this post: http://tmblr.co/ZbaP8xARuvEh
blog comments powered by Disqus