最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Node access multiple databases - Stack Overflow

programmeradmin1浏览0评论

I want to connect to different databases on server side so I can perform queries that include those two databases using node.

I have a config.js like this:

module.exports = {
    database: {
        user: 'brunojs',
        password: 'bdpf5',
        connectString: 'localhost:1521/orcl'
    },
    jwtSecretKey: "jmvhDdDBMvqb=M@6h&QVA7x"
};

This saves my info for accessing the first database.

Then I have one list.js file which performs the query:

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;

Everything works fine.

The thing is, right now, I want to perform queries using another database. How can I do that?

I want to connect to different databases on server side so I can perform queries that include those two databases using node.

I have a config.js like this:

module.exports = {
    database: {
        user: 'brunojs',
        password: 'bdpf5',
        connectString: 'localhost:1521/orcl'
    },
    jwtSecretKey: "jmvhDdDBMvqb=M@6h&QVA7x"
};

This saves my info for accessing the first database.

Then I have one list.js file which performs the query:

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;

Everything works fine.

The thing is, right now, I want to perform queries using another database. How can I do that?

Share Improve this question asked Feb 25, 2016 at 15:29 Bruno FernandesBruno Fernandes 4572 gold badges6 silver badges15 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 2

the right solution is to use pool https://github./oracle/node-oracledb/blob/master/doc/api.md#createpool Creating massive pool:

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"
};

during initialization web-server, initialize the pools

const dbConfig = require('../config/database.js');
async function initialize() {
  dbConfig.database.forEach(async function(item) {
    const pool = await oracledb.createPool(item);
  });
}

Then you can use the created pools when calling the connection procedure:

conn = await oracledb.getConnection('database1');
 const execresult = await conn.execute(context.execsql, execbinds, context.opts);

First, add a second credentials object in your 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"
};

then use one or other here:

oracledb.getConnection(
    config.database, // you could change this line to config.database2
    function(err, connection){
         if (err) { ...

If you want to query one database, then another, you'd need to keep references to both connection objects (error checking omitted for brevity):

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(...);
            }
    });

This is slightly out of scope for your question, but you could also take a look at Waterline. It supports setting up multiple databases and then tying models to them, so that knowing where certain data models are stored is abstracted away.

you can always use links on the DB side, so your java code does not have to connect to another DB, for example:

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
/* ... */
发布评论

评论列表(0)

  1. 暂无评论