Hola
En esta entrada vamos a montar un miniservidor html con Node.js que conecte a cierta tabla de Oracle mediante oracledb. Los pasos para instalar todo son:
1) Instalamos node.js y su gestor de paquetes npm
sudo apt-get install nodejs
sudo apt-get install npm
2) Verificamos que está bien instalado con:
nodejs --version --> v4.2.6
npm --version --> 3.5.2
3) Instalamos algunas de las librerías javascript que vamos a necesitar en nuestro servidor 'miserver.js':
npm install http
npm install httpdispatcher
4) Descargamos el 'Oracle Instant Client' de Oracle (http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html) siguiendo las instrucciones de (https://github.com/oracle/node-oracledb). Necesitaremos los packages 'basic' y 'SDK' si la BBDD está en remoto (es lo habitual). Por lo que hemos bajado las versiones de RedHat/linux:
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
5) Para Ubuntu no hay instalador, así que transformamos el instalador rpm (RedHat) con:
sudo alien -i oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
sudo alien -i oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
Nota Ubuntu. Tambien hemos necesitado instalar la libreria libaio, no se para qué hace falta
sudo apt-get install libaio1
6) Seguidamente instalamos la librería javascript oracledb con:
npm install oracledb
Nota Ubuntu. Para poder lanzar sin problemas la instalacion de oracledb (saltaba un error en 'node-gyp rebuild' descrito en (https://github.com/npm/npm/issues/11335)) he tenido que crear un softlink 'node' dado que se petaba por tener instalado nodejs (el package de ubuntu) en vez del paquete node 'oficial'. Para crear el softlink lanzamos:
sudo ln -s /usr/bin/nodejs /usr/local/bin/node
8) Creamos nuestro servidor web por el puerto 8888 en javascrip, para ello creamos un fichero llamado 'miserver.js' con el siguiente codigo:
//Importamos las librerias necesarias
var http = require('http');
var HttpDispatcher = require('httpdispatcher');
var oracledb = require('oracledb');
//Inicializamos el enrutador
var enrutador = new HttpDispatcher();
//Definimos la función que manejara las peticiones
function handleRequest(request, response){
console.log("Peticion:");
console.log(request.url);
enrutador.dispatch(request, response);
}
//Creamos el servidor y lo ponemos a escuchar en el puerto 8888
var server = http.createServer(handleRequest);
server.listen(8888, function(){
console.log("Arrancado y escuchando en el puerto 8888");
});
//Creamos la función que devuelve la pagina /
enrutador.onGet("/", function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write("<?xml version='1.0' encoding='UTF-8'?>");
res.write("<!DOCTYPE html>");
res.write("<html lang='es' xmlns='http://www.w3.org/1999/xhtml'>");
res.write("<head>");
res.write(" <meta http-equiv='Content-type' content='text/html; charset=UTF-8'/>");
res.write(" <meta name='language' content='es'/>");
res.write("</head>");
res.write("<body>");
res.write("<h3> Primer miniportal con Node.js</h3>");
res.write(" <ul>");
res.write(" <li><a href='/listaprovincias'>Lista de provincias</a></li>");
res.write(" </ul>");
res.write("</body>");
res.end();
});
//Creamos la función que devuelve la pagina /listaprovincias
enrutador.onGet("/listaprovincias", function(req, res) {
oracledb.getConnection(
{
user : "user",
password : "pwd",
connectString : "127.0.0.1:1535/prueba"
},
function(err, connection) {
if (err) {
console.error(err);
return;
}
connection.execute("SELECT CPRO, DPRO FROM PROVINCIAS ORDER BY DPRO",
function(err, result) {
if (err) {
console.error(err.message);
connection.close();
return;
}
console.log("Encontradas "+result.rows.length+" provincias");
res.writeHead(200, {'Content-Type': 'text/html'});
res.write("<?xml version='1.0' encoding='UTF-8'?>");
res.write("<!DOCTYPE html>");
res.write("<html lang='es' xmlns='http://www.w3.org/1999/xhtml'>");
res.write("<head>");
res.write(" <meta http-equiv='Content-type' content='text/html; charset=UTF-8'/>");
res.write(" <meta name='language' content='es'/>");
res.write("</head>");
res.write("<body>");
res.write("<h3> Listado de provincias </h3>");
res.write("<table>");
res.write("<tr>");
res.write("<th>CPRO</th>");
res.write("<th>DPRO</th>");
res.write("</tr>");
for (reg in result.rows){
res.write("<tr>");
res.write("<th>"+result.rows[reg][0]+"</th>");
res.write("<th>"+result.rows[reg][1]+"</th>");
res.write("</tr>");
console.log(result.rows[reg][0] + "---" + result.rows[reg][1]);
}
res.write("</table>");
res.write("<a href='/'>Volver</a>");
res.write("</body>");
res.end();
});
});
});
9) Levantamos el servidor con:
node miserver.js
10) Desde el navegador lanzamos la siguiente URL: http://localhost:8888/
Eso es todo