【问题标题】:How to connect KnexJS with database Oracle?如何将 KnexJS 与数据库 Oracle 连接?
【发布时间】:2017-01-17 19:53:13
【问题描述】:

我有连接,但我不知道它是否存在于连接密钥 odbc... 但即使我把它扔掉,下面通知的错误仍然存​​在

const knex = require('knex');

// connection database
const dbmdlog = knex({
  client: 'oracle',
  connection: {
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'mydb',
    odbc: 'MYDB'
  }
});

module.exports = dbmdlogp;

我正在一个 collun 中做一个简单的选择
但总是返回错误:

  Unhandled rejection TypeError: _this2.driver.connect is not a function
        at /var/www/html/myapp/node_modules/knex/lib/dialects/oracle/index.js:143:21
        at Promise._execute (/var/www/html/myapp/node_modules/bluebird/js/release/debuggability.js:299:9)
        at Promise._resolveFromExecutor (/var/www/html/myapp/node_modules/bluebird/js/release/promise.js:481:18)
        at new Promise (/var/www/html/myapp/node_modules/bluebird/js/release/promise.js:77:14)
        at Client_Oracle.acquireRawConnection (/var/www/html/myapp/node_modules/knex/lib/dialects/oracle/index.js:142:12)
        at Object.create (/var/www/html/myapp/node_modules/knex/lib/client.js:231:16)
        at Pool._createResource (/var/www/html/myapp/node_modules/generic-pool/lib/generic-pool.js:326:17)
        at Pool.dispense [as _dispense] (/var/www/html/myapp/node_modules/generic-pool/lib/generic-pool.js:314:12)
        at Pool.acquire (/var/www/html/myapp/node_modules/generic-pool/lib/generic-pool.js:392:8)
        at /var/www/html/myapp/node_modules/knex/lib/client.js:281:19
        at Promise._execute (/var/www/html/myapp/node_modules/bluebird/js/release/debuggability.js:299:9)
        at Promise._resolveFromExecutor (/var/www/html/myapp/node_modules/bluebird/js/release/promise.js:481:18)
        at new Promise (/var/www/html/myapp/node_modules/bluebird/js/release/promise.js:77:14)
        at Client_Oracle.acquireConnection (/var/www/html/myapp/node_modules/knex/lib/client.js:272:12)

        at /var/www/html/myapp/node_modules/knex/lib/runner.js:200:30
     at Promise._execute (/var/www/html/myapp/node_modules/bluebird/js/release/debuggability.js:299:9)

【问题讨论】:

  • odbc 属性有什么用? Knex 将使用新的“oracledb”模块而不是过时的“oracle”模块,有关连接示例,请参见github.com/tgriesser/knex/blob/master/test/unit/dialects/…。你有没有安装node-oracledb(或者node-oracle,如果你真的需要使用那个驱动的话)
  • 确实 node-oracledb 驱动程序和 oracledb XE 11.2.0 是目前唯一通过集成测试自动测试的 oracle 设置。

标签: node.js oracle knex.js


【解决方案1】:

knex 和 OracleDB 的组合可以正常工作。以下是 package.json 中的包:"knex": "0.13.0", "oracledb": "1.13.1"

还有 knex 调用:

var conn = knex({
  client: 'oracledb',
  connection: {
    host: config.oracle.host,
    user: config.oracle.user,
    password: config.oracle.password,
    database: config.oracle.database,
  }
});

【讨论】:

  • 在这个答案中不清楚“config.oracle”值的来源。作者能否解释一下它们的设置位置,并举例说明?
  • 好吧 config 是一个普通的旧 javascript 对象! ` var config = { oracle: { host: '127.0.0.1', ... } } `
【解决方案2】:

如果有人需要传递连接字符串。但请注意,连接字符串中的详细信息需要与您自己的环境相匹配。

const oracledb = require("oracledb");
oracledb.initOracleClient({ libDir: "C:\\oracle\\instantclient_12_1" });

const knex = require("knex")({
    client: "oracledb",
    connection: {
        user: "YOUR_USER",
        password: "YOUR_PASSWORD",
        connectString: "(DESCRIPTION=(CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(SOURCE_ROUTE=yes)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=tcp)(HOST=your2.domain.com)(PORT=11529))(ADDRESS=(PROTOCOL=tcp)(HOST=your2.domain.com)(PORT=11529)))(ADDRESS_LIST=(FAILOVER=on)(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=tcp)(HOST=your3.domain.com)(port=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=your4.domain.com)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=YOUR_SERVICE.your5.domain.com)))",
        requestTimeout: 100
    },
    fetchAsString: ["number", "clob"]
});

knex.select().from("TABLE1").asCallback(function(err, rows){
    if(err)
        console.log(err);
    else
        console.table(rows);
});

【讨论】:

猜你喜欢
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2020-08-05
  • 2020-04-22
相关资源
最近更新 更多