<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Angel "Java" Lopez : Sqlite</title><link>http://msmvps.com/blogs/lopez/archive/tags/Sqlite/default.aspx</link><description>Tags: Sqlite</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Jugando con Node.js, Ubuntu, Sqlite3 y node-Sqlite</title><link>http://msmvps.com/blogs/lopez/archive/2011/02/04/playing_2D00_with_2D00_node_2D00_js_2D00_ubuntu_2D00_sqlite3_2D00_and_2D00_node_2D00_sqlite.aspx</link><pubDate>Fri, 04 Feb 2011 10:44:41 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1787602</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1787602</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2011/02/04/playing_2D00_with_2D00_node_2D00_js_2D00_ubuntu_2D00_sqlite3_2D00_and_2D00_node_2D00_sqlite.aspx#comments</comments><description>&lt;p&gt;Hace unos días, estuve jugando con &lt;a href="http://nodejs.org/"&gt;Node.Js&lt;/a&gt;, 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:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://nodejs.org/#download" href="http://nodejs.org/#download"&gt;http://nodejs.org/#download&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Expandí el archivo, y pasé al directorio que quedó creado. Ahí ejecuté los pasos:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;./configure      &lt;br /&gt;make       &lt;br /&gt;sudo make install&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;(Noten que es diferente de lo que indica una de mis fuentes consultadas &lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/"&gt;Learning Server-Side Javascript with Node.js&lt;/a&gt;: 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 ;-)&lt;/p&gt;  &lt;p&gt;Hecho esto, instalé Sqlite3 en mi Ubuntu (no Sqlite, sino la versión 3):&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;sudo apt-get install sqlite3&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;En un directorio de trabajo para este proyecto, ejecuté:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;sqlite3 test.db&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;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é:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;create table customers(id int, name varchar(30), address varchar(30));      &lt;br /&gt;insert into customers(id, name, address) values (1, ‘Customer 1’, ‘Address 1’);       &lt;br /&gt;insert into customers(id, name, address) values (2, ‘Customer 2’, ‘Address 2’);       &lt;br /&gt;insert into customers(id, name, address) values (3, ‘Customer 3’, ‘Address 3’);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Mi creatividad para los datos de test es proverbial ;-)&lt;/p&gt;  &lt;p&gt;Hay una lista de módulos para Node.js:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://github.com/ry/node/wiki/modules" href="https://github.com/ry/node/wiki/modules"&gt;https://github.com/ry/node/wiki/modules&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Quería usar el módulo de node.js llamado express, lo bajé desde &lt;a href="http://github.com/visionmedia/express/tree/master"&gt;Express&lt;/a&gt;. 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é:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;./install.sh&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Luego, descargué el código de node-sqlite, desde &lt;a href="http://github.com/grumdrig/node-sqlite"&gt;grumdig github&lt;/a&gt;. (Tengo que probar otra implementación: &lt;a title="http://github.com/orlandov/node-sqlite" href="http://github.com/orlandov/node-sqlite"&gt;http://github.com/orlandov/node-sqlite&lt;/a&gt;, que tiene llamadas asincrónicas.).&lt;/p&gt;  &lt;p&gt;Expandí lo bajado en un subdirectorio de mi directorio de trabajo, pasé a ese directorio, e intenté las &lt;a href="http://grumdrig.com/node-sqlite/"&gt;instrucciones de instalación&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;node-waf configure      &lt;br /&gt;node-waf build&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;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é:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;sudo apt-get install libsqlite3-dev&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;volví a intentar la instalación de node-sqlite, y funcionó.&lt;/p&gt;  &lt;p&gt;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.&lt;/p&gt;  &lt;p&gt;Luego de escribir unos ejemplos de prueba, escribí una aplicación simple (noten que los require se refieren a mi directorio de trabajo):&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#008000;"&gt;/**
 * Module dependencies.
 */&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; express = require(&amp;#39;./express/lib/express&amp;#39;);
&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; sqlite = require(&amp;quot;&lt;span style="color:#8b0000;"&gt;./node-sqlite/sqlite&lt;/span&gt;&amp;quot;);
&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; sys = require(&amp;#39;sys&amp;#39;);
&lt;span style="color:#008000;"&gt;/*
 * Open the database
 */&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; db = sqlite.openDatabaseSync(&amp;quot;&lt;span style="color:#8b0000;"&gt;test.db&lt;/span&gt;&amp;quot;);
&lt;span style="color:#008000;"&gt;/*
 * Creates the web server
 */&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; app = express.createServer();
app.get(&amp;#39;/&amp;#39;, &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(req, res){
  res.send(&amp;#39;Hello World&amp;#39;);
});
app.get(&amp;#39;/customers&amp;#39;, &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(req, res){
  res.writeHead(200, { &amp;#39;Content-Type&amp;#39;: &amp;#39;text/html&amp;#39; });
  db.query(&amp;quot;&lt;span style="color:#8b0000;"&gt;SELECT id, name, address from customers&lt;/span&gt;&amp;quot;, &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (records) {
    res.write(&amp;#39;&amp;lt;h1&amp;gt;Customers&amp;lt;/h1&amp;gt;\n&amp;#39;);
    res.write(&amp;#39;&amp;lt;table&amp;gt;\n&amp;#39;);
    &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; records.&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;; i++) {
        res.write(&amp;#39;&amp;lt;tr&amp;gt;\n&amp;#39;);
        res.write(&amp;#39;&amp;lt;td&amp;gt;&amp;#39; + records[i].id + &amp;#39;&amp;lt;/td&amp;gt;\n&amp;#39;);
        res.write(&amp;#39;&amp;lt;td&amp;gt;&amp;#39; + records[i].&lt;span style="color:#0000ff;"&gt;name&lt;/span&gt; + &amp;#39;&amp;lt;/td&amp;gt;\n&amp;#39;);
        res.write(&amp;#39;&amp;lt;td&amp;gt;&amp;#39; + records[i].address + &amp;#39;&amp;lt;/td&amp;gt;\n&amp;#39;);
        res.write(&amp;#39;&amp;lt;/tr&amp;gt;&amp;#39;);
    }
    res.write(&amp;#39;&amp;lt;/table&amp;gt;\n&amp;#39;);
    res.end();
  });
}); 
&lt;span style="color:#008000;"&gt;/*
 * Start web server
 */&lt;/span&gt;
app.listen(3000);
&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Ejecutando la aplicación, la página &lt;a href="http://localhost:3000/customers"&gt;http://localhost:3000/customers&lt;/a&gt; resultó:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles2/nodejs01.png" alt="" /&gt; &lt;/p&gt;

&lt;p&gt;Bueno, no será “qué bruto, qué aplicación!” ;-) ;-) pero espero que les sirva por si tienen que pasar por todos estos pasos.&lt;/p&gt;

&lt;p&gt;Como siempre, colecciono enlaces. Mis enlaces sobre Node.Js:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://delicious.com/ajlopez/nodejs"&gt;http://delicious.com/ajlopez/nodejs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Nos leemos!&lt;/p&gt;

&lt;p&gt;Angel “Java” Lopez 
  &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; 

  &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1787602" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Ubuntu/default.aspx">Ubuntu</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NodeJs/default.aspx">NodeJs</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Sqlite/default.aspx">Sqlite</category></item></channel></rss>