我想连接到服务器端的不同数据库,这样我就可以使用node执行包含这两个数据库的查询。
我有config.js
这样:
module.exports = {
database: {
user: 'brunojs',
password: 'bdpf5',
connectString: 'localhost:1521/orcl'
},
jwtSecretKey: "jmvhDdDBMvqb=M@6h&QVA7x"
};
这会保存我访问第一个数据库的信息。
然后我有一个list.js
文件执行查询:
var oracledb = require('oracledb');
var jwt = require('jsonwebtoken');
var config = require(__dirname + '../../config.js');
function get(req, res, next) {
oracledb.getConnection(
config.database,
function(err, connection){
if (err) {
return next(err);
}
connection.execute(
'select num_sequencial, notes, des_especialidade, dt_diag ' +
'from organite_repository ',
{},//no binds
{
outFormat: oracledb.OBJECT
},
function(err, results){
if (err) {
connection.release(function(err) {
if (err) {
console.error(err.message);
}
});
return next(err);
}
res.status(200).json(results.rows);
connection.release(function(err) {
if (err) {
console.error(err.message);
}
});
}
);
}
);
}
module.exports.get = get;
一切正常。
问题是,现在,我想使用另一个数据库执行查询。我怎么能这样做?
答案 0 :(得分:1)
首先,在config.js
module.exports = {
database: {
user: 'brunojs',
password: 'bdpf5',
connectString: 'localhost:1521/orcl'
},
database2: {
user: 'user2',
password: 'password',
connectString: 'someotherhost:1521/orcl'
},
jwtSecretKey: "jmvhDdDBMvqb=M@6h&QVA7x"
};
然后在这里使用一个或其他:
oracledb.getConnection(
config.database, // you could change this line to config.database2
function(err, connection){
if (err) { ...
如果要查询一个数据库,然后查询另一个数据库,则需要保留对connection
个对象的引用(为简洁起见,省略错误检查):
oracledb.GetConnection(
config.database,
function(err, connection1) {
oracledb.GetConnection(
config.database2,
function(err, connection2) {
// in this function you can use either connection object
connection1.execute(...);
connection2.execute(...);
}
});
答案 1 :(得分:1)
这稍微超出了您的问题范围,但您也可以查看Waterline。它支持设置多个数据库,然后将模型绑定到它们,以便了解存储某些数据模型的位置。
答案 2 :(得分:1)
您始终可以使用数据库端的链接,因此您的Java代码不必连接到其他数据库,例如:
select num_sequencial, notes, des_especialidade, dt_diag
from organite_repository@linkA
UNION
select num_sequencial, notes, des_especialidade, dt_diag
from organite_repository@linkB
/* ... */
答案 3 :(得分:1)
正确的解决方案是使用池https://github.com/oracle/node-oracledb/blob/master/doc/api.md#createpool 创建大量池:
module.exports = {
database: [{user: 'brunojs',
password: 'bdpf5',
connectString: 'localhost:1521/orcl',
poolAlias:'database1'
},
{user: 'brunojs',
password: 'bdpf5',
connectString: 'localhost2:1521/orcl',
poolAlias:'database2'
}],
jwtSecretKey: "jmvhDdDBMvqb=M@6h&QVA7x"
};
在初始化Web服务器期间,初始化池
const dbConfig = require('../config/database.js');
async function initialize() {
dbConfig.database.forEach(async function(item) {
const pool = await oracledb.createPool(item);
});
}
然后,您可以在调用连接过程时使用创建的池:
conn = await oracledb.getConnection('database1');
const execresult = await conn.execute(context.execsql, execbinds, context.opts);