Node.js
Node.js med Oracle
Sök…
Anslut till Oracle DB
Ett mycket enkelt sätt att ansluta till en ORACLE-databas är med hjälp av oracledb
modulen. Den här modulen hanterar anslutningen mellan din Node.js-app och Oracle-servern. Du kan installera den som alla andra moduler:
npm install oracledb
Nu måste du skapa en ORACLE-anslutning, som du senare kan fråga.
const oracledb = require('oracledb');
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNS_NAME"
},
connExecute
);
ConnectString "ORACLE_DEV_DB_TNA_NAME" kan leva i en tnsnames.org-fil i samma katalog eller där din oracle instant client är installerad.
Om du inte har någon Oracle-omedelbar klient installerad på din utvecklingsmaskin kan du följa instant client installation guide
för instant client installation guide
för ditt operativsystem.
Fråga ett anslutningsobjekt utan parametrar
Användning kan nu använda connExecute-funktionen för att utföra en fråga. Du har möjlighet att få frågeställningen som ett objekt eller array. Resultatet skrivs ut på console.log.
function connExecute(err, connection)
{
if (err) {
console.error(err.message);
return;
}
sql = "select 'test' as c1, 'oracle' as c2 from dual";
connection.execute(sql, {}, { outFormat: oracledb.OBJECT }, // or oracledb.ARRAY
function(err, result)
{
if (err) {
console.error(err.message);
connRelease(connection);
return;
}
console.log(result.metaData);
console.log(result.rows);
connRelease(connection);
});
}
Eftersom vi använde en anslutning utan pooler, måste vi släppa vår anslutning igen.
function connRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
Utgången för ett objekt kommer att vara
[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]
och utgången för en matris kommer att vara
[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]
Använda en lokal modul för enklare frågeställningar
För att förenkla din fråga från ORACLE-DB kanske du vill ringa din fråga så här:
const oracle = require('./oracle.js');
const sql = "select 'test' as c1, 'oracle' as c2 from dual";
oracle.queryObject(sql, {}, {})
.then(function(result) {
console.log(result.rows[0]['C2']);
})
.catch(function(err) {
next(err);
});
Uppbyggnaden av anslutningen och exekveringen ingår i denna oracle.js-fil med innehåll på följande sätt:
'use strict';
const oracledb = require('oracledb');
const oracleDbRelease = function(conn) {
conn.release(function (err) {
if (err)
console.log(err.message);
});
};
function queryArray(sql, bindParams, options) {
options.isAutoCommit = false; // we only do SELECTs
return new Promise(function(resolve, reject) {
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNA_NAME"
})
.then(function(connection){
//console.log("sql log: " + sql + " params " + bindParams);
connection.execute(sql, bindParams, options)
.then(function(results) {
resolve(results);
process.nextTick(function() {
oracleDbRelease(connection);
});
})
.catch(function(err) {
reject(err);
process.nextTick(function() {
oracleDbRelease(connection);
});
});
})
.catch(function(err) {
reject(err);
});
});
}
function queryObject(sql, bindParams, options) {
options['outFormat'] = oracledb.OBJECT; // default is oracledb.ARRAY
return queryArray(sql, bindParams, options);
}
module.exports = queryArray;
module.exports.queryArray = queryArray;
module.exports.queryObject = queryObject;
Observera att du har båda metoderna queryArray och queryObject för att ringa på ditt orakelobjekt.