Jugando con Node.js, Ubuntu, Sqlite3 y node-Sqlite

Hace unos días, estuve jugando con Node.Js, la librería Javascript que puede ser usada para crear aplicaciones web en el servidor. Como puede ser complicado instalarlo en Windows, lo instalé directamente en Ubuntu. Me bajé el código de:

http://nodejs.org/#download

Expandí el archivo, y pasé al directorio que quedó creado. Ahí ejecuté los pasos:

./configure
make
sudo make install

(Noten que es diferente de lo que indica una de mis fuentes consultadas Learning Server-Side Javascript with Node.js: agregué el .configure, nacido hace décadas debido a la necesidad de detectar en qué sistema se va a ejecutar el make; recuerdo aquellos tiempos donde sólo había make ;-)

Hecho esto, instalé Sqlite3 en mi Ubuntu (no Sqlite, sino la versión 3):

sudo apt-get install sqlite3

En un directorio de trabajo para este proyecto, ejecuté:

sqlite3 test.db

Esta es una línea de comando (no hay servidor que se esté ejecutando; va directamente al archivo recién creado como test.db (si existe, usa el existente)). Luego, ingresé:

create table customers(id int, name varchar(30), address varchar(30));
insert into customers(id, name, address) values (1, ‘Customer 1’, ‘Address 1’);
insert into customers(id, name, address) values (2, ‘Customer 2’, ‘Address 2’);
insert into customers(id, name, address) values (3, ‘Customer 3’, ‘Address 3’);

Mi creatividad para los datos de test es proverbial ;-)

Hay una lista de módulos para Node.js:

https://github.com/ry/node/wiki/modules

Quería usar el módulo de node.js llamado express, lo bajé desde Express. Lo expandí bajo mi directorio de trabajo, con nombre express (podría haberlo puesto en otro lado, y comenzar a probar la variable de entorno NODE_PATH, para que las referencias a ese módulo se resolvieran desde cualquier parte). En el directorio recién creado express, ejecuté:

./install.sh

Luego, descargué el código de node-sqlite, desde grumdig github. (Tengo que probar otra implementación: http://github.com/orlandov/node-sqlite, que tiene llamadas asincrónicas.).

Expandí lo bajado en un subdirectorio de mi directorio de trabajo, pasé a ese directorio, e intenté las instrucciones de instalación:

node-waf configure
node-waf build

Pero la segunda falló. El build del binding de c++ a Sqlite3 requiere el código fuente de Sqlite3 (no vi indicado en ningún lado eso, pero es así). Así que investigué un poco, y ejecuté:

sudo apt-get install libsqlite3-dev

volví a intentar la instalación de node-sqlite, y funcionó.

Nota, si no tienen un compilador c++, como puede pasar en un Ubunto de uso, no de desarrollo, tendran que traerlo con un sudo apt-get g++, por ejemplo. Hay varios compiladores c++ para elegir.

Luego de escribir unos ejemplos de prueba, escribí una aplicación simple (noten que los require se refieren a mi directorio de trabajo):

/**
 * Module dependencies.
 */
var express = require('./express/lib/express');
var sqlite = require("./node-sqlite/sqlite");
var sys = require('sys');
/*
 * Open the database
 */
var db = sqlite.openDatabaseSync("test.db");
/*
 * Creates the web server
 */
var app = express.createServer();
app.get('/', function(req, res){
  res.send('Hello World');
});
app.get('/customers', function(req, res){
  res.writeHead(200, { 'Content-Type': 'text/html' });
  db.query("SELECT id, name, address from customers", function (records) {
    res.write('<h1>Customers</h1>\n');
    res.write('<table>\n');
    for (var i = 0; i < records.length; i++) {
        res.write('<tr>\n');
        res.write('<td>' + records[i].id + '</td>\n');
        res.write('<td>' + records[i].name + '</td>\n');
        res.write('<td>' + records[i].address + '</td>\n');
        res.write('</tr>');
    }
    res.write('</table>\n');
    res.end();
  });
}); 
/*
 * Start web server
 */
app.listen(3000);


Ejecutando la aplicación, la página http://localhost:3000/customers resultó:





Bueno, no será “qué bruto, qué aplicación!” ;-) ;-) pero espero que les sirva por si tienen que pasar por todos estos pasos.



Como siempre, colecciono enlaces. Mis enlaces sobre Node.Js:



http://delicious.com/ajlopez/nodejs



Mi plan: implementar un servidor web en AjSharp, mínima sombra de Node.js; seguir con Node.js con páginas CRUD de una tabla; probar el otro node-sqlite3 con llamadas asincrónicas; generar código para todo esto.



Nos leemos!



Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 14005, 14908, 15550, 15551. Bookmark the permalink.

2 Responses to Jugando con Node.js, Ubuntu, Sqlite3 y node-Sqlite

  1. paulo says:

    La forma mas simple de instalar módulos en node es usando npm (https://github.com/isaacs/npm), si se meten de lleno en el desarrollo con node, les recomiendo nave (https://github.com/isaacs/nave) que es un versión manager como el rvm de Ruby pero para node, por ultimo hay un libro escrito de forma colaborativa sobre node (http://visionmedia.github.com/masteringnode/) toca todo lo basico para empezar y algunas cosas avanzadas como frameworks y deployment.

  2. eduardo says:

    Bien explicado. Me gustó.

    Gracias

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>