javascript - Node 访问多个数据库

标签 javascript angularjs node.js oracle

我想连接到服务器端的不同数据库,以便我可以使用 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;

一切正常。

问题是,现在我想使用另一个数据库执行查询。我怎样才能做到这一点?

最佳答案

正确的解决方案是使用池 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"
};

在初始化网络服务器期间,初始化池

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);

关于javascript - Node 访问多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631553/

相关文章:

javascript - 在 AngularJS 中构建 View

javascript - Angular 如何处理具有多个指令的元素

javascript - Dexie.js - 使用 between 和复合索引按多个键过滤

javascript - 如何使用带有 Sequelize 的 iLike 运算符进行不区分大小写的查询

javascript - AngularJS - 如何创建具有特定格式的表单?

javascript - 从 Node.js 调用 SOAP 服务

node.js - 如何使用Sequelize中的输出参数在SQL Server中执行存储过程?

node.js - 如何在 Nodejs Azure Cosmos 中覆盖文档

javascript - 如何防止孙元素的超链接

javascript - 使用 JavaScript/jQuery 将多行 HTML 插入 iframe 的正确方法?