Conectar oracle desde nodejs

Las últimas semanas he intentado conectar el oracle db desde mi código nodejs. Lo que encontré hasta ahora son 2 bibliotecas principales, como https://github.com/mariano/node-db-oracle, que está desactualizada (la última actualización fue hace un año) y la segunda es https://github.com/ nearinfinity / node-oracle que está realmente actualizado, sin embargo, no pude conectar Oracle con ninguno de esos modules.

Problema del alcalde de que npm install oracle // pr db-oracle falla debido a

../src/connection.h:10:18: fatal error: occi.h: No such file or directory 

Traté de clonar el código y realizar la installation local y luego copyr el module completo en mi proyecto, instalar bien wen, pero cuando coloco el module en mi proyecto me encuentro con este error

  module.js:340 throw err; ^ Error: Cannot find module './build/Release/oracle_bindings' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (/var/www/node-test/node_modules/db-oracle/db-oracle.js:18:15) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) 

Me habían seguido el procedimiento de installation para ambos controlleres y había habido variables de configuration como esta (/ var / environment)

 OCI_HOME=/opt/instantclient_12_1 OCI_VERSION=12 OCI_INCLUDE_DIR=/opt/instantclient_12_1/sdk/include OCI_LIB_DIR=/opt/instantclient_12_1 LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client/lib 

Utilicé Ubuntu 12.04, y la versión del nodo es v0.10.18. Aquí está mi ejemplo de file de testing del nodo:

 var oracle = require('oracle'); new oracle.Database({ hostname: 'myserver.com', port: 1521, user: 'myuser', password: 'mypass', database: 'XE' }).connect(function(error) { if (error) { return console.log("CONNECTION ERROR: " + error); } this.query("select * FROM `store`").execute(function(error, rows) { if (error) { return console.log('ERROR: ' + error); } console.log(rows.length + ' ROWS'); }); }); 

cualquier sugerencia adicional sería agradable. Intenté noradle ( https://github.com/kaven276/noradle ) que parece ser demasiado pesado para mi propósito.

Sé que esta es una publicación anterior … solo quería mencionar una forma segura para que nodejs se comuniquen a Oracle sin modules adicionales.

Configure el oracle para que pueda crear y recibir requestes http. Hay algunas maneras de hacer esto:

Lo más fácil es activar la puerta de enlace EPG:

También puedes configurar modplsq:

o el oyente Apex:

Luego, en el nodo js haga un http.get estándar:

 http.get("http://localhost/accessor/myschema.my_procedure?x=1&y=2", function(res) { console.log("Got response: " + res.statusCode); }).on('error', function(e) { console.log("Got error: " + e.message); 

});

Cualquiera que sea el enfoque … oracle seguro para que solo responda a la dirección IP del server nodejs. Entonces, si se ejecuta en localhost:

 if owa_util.get_cgi_env('REMOTE_ADDR') = '127.0.0.1' then --ok else -- fail end if; 

También bloquea las llamadas a cada otro package y procedimiento. Hay pocas maneras de hacer esto dependiendo de la ruta que tome.

Asegúrese de hacer esto como mínimo:

  • crea una list blanca de elementos a los que se puede llamar desde la web
  • requiere que todas las URL contengan el nombre de esquema como: myuser.myprocedure
  • asegúrese de que la primera parte de la url (hasta la ruta de la consulta) contenga solo az 0-9
  • realmente una buena list blanca se ocupará de la mayoría de estos artículos

Ahí lo tiene … no necesita preocuparse si un module se romperá o dejará de funcionar con la próxima versión.

Y … puede comunicarse fácilmente desde Oracle al uso del nodo:

  • apex_web_service.make_rest_request
  • utl_http

¿Recibió el Cliente instantáneo como se describe aquí ? Si estoy leyendo esto correctamente, necesita los packages Basic (o Basic Lite) y SDK Instant Client. El package SDK puede tener el file de cabecera con el que tiene problemas.

Nota al margen: en mi experiencia, no siempre es necesario agregar Instant Client a PATH ; generalmente puede salirse con la suya simplemente asegurándose de que su ejecutable puede encontrarlo (lo que a menudo significa simplemente colocarlo en el mismo directory).

Establezca la ruta del cliente Oracle en el símbolo del sistema como se muestra a continuación antes de iniciar la aplicación Node

Establezca PATH = C: \ oraclexe \ app \ oracle \ instantclient_12_1;% PATH%

Tuve el problema anterior, este resolvió el mío y ahora puedo conectarme a Oracle.

Pero el único problema que todavía estoy enfrentando es la ejecución de la instrucción select. Siempre devuelve el error. Puedo ejecutar SP, crear declaraciones y todo lo demás sin error. Estoy atrapado aquí y algo decepcionado.

Por lo que entiendo, Set PATH pone la cadena que especificó al principio de su variable de entorno de ruta. Al principio, ingresé la ruta de la carpeta del cliente instantáneo.

C: \ oraclexe \ app \ oracle \ instantclient_12_1;

Se corrigió el error de enlace del oracle, pero las consultas no funcionarían. Luego, agregué la ruta de la carpeta vc11 ANTES de la ruta del cliente instantáneo, por lo que se ve así:

C: \ oraclexe \ app \ oracle \ instantclient_12_1 \ vc11; C: \ oraclexe \ app \ oracle \ instantclient_12_1;

¡Ahora mis consultas funcionan!