【问题标题】:Knex.js connection error when rerunning the function重新运行函数时出现 Knex.js 连接错误
【发布时间】:2021-06-02 15:29:46
【问题描述】:

我正在使用 Knex 连接到 Azure 数据库,运行一个返回数据库状态的查询(复制/在线)。 如果我运行一次,一切都很好。 但是,如果我使用 setInterval 重新运行它(我想知道状态何时从 COPYING 更改为 ONLINE),我会在第二次和第三次以及调用函数时遇到连接错误。

这是我的代码

const knex = require('knex')({
  client: 'mssql',
  connection: {
    host: '***',
    user: '***',
    password: '***',
    options: { requestTimeout: 350000, encrypt: true },
  },
  pool: {
    min: 0,
    max: 15,
  },
});
async function copyStatus() {
  try {
    console.log('Running query');
    const status = await knex.raw(
      "SELECT name, state_desc FROM sys.databases WHERE name = 'Tide_QA_Dev_runtime' "
    );
    return status[0].state_desc;
    // console.log(status[0].state_desc);
  } catch (error) {
    console.log(error);
  } finally {
    console.log('Closing connection with database');
    await knex.destroy();
  }
}

function intervalFunc() {
  copyStatus().then(function (result) {
    if (result === 'ONLINE') {
      console.log('Database copy is done.');
    } else if (result === 'Database is still copying') {
      console.log('bezig');
    }
  });
}

setInterval(intervalFunc, 2000);

这是我的输出

Closing connection with database
Database copy is done.
Running query
Error: Unable to acquire a connection
    at Client_MSSQL.acquireConnection (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/client.js:286:13)
    at Runner.ensureConnection (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/execution/runner.js:259:46)
    at Runner.run (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/execution/runner.js:30:30)
    at Raw.Target.then (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/builder-interface-augmenter.js:24:43)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
Closing connection with database
Running query
Error: Unable to acquire a connection
    at Client_MSSQL.acquireConnection (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/client.js:286:13)
    at Runner.ensureConnection (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/execution/runner.js:259:46)
    at Runner.run (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/execution/runner.js:30:30)
    at Raw.Target.then (/Users/davidbouckaert/Documents/Qite/TIDE_repo/node_modules/knex/lib/builder-interface-augmenter.js:24:43)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
Closing connection with database```

It looks like the connection is made (see console log: Running query).
Any idea what's going on?

【问题讨论】:

    标签: javascript node.js sql-server azure-sql-database knex.js


    【解决方案1】:

    你应该使用下面的代码,它对我有用。

    const knex = require('knex')({
        client: 'mssql',
        connection: {
            // no tcp:
            server: 'j***2sqlserver.database.windows.net',
            user: 'j***2',
            password: 'J****0',
            database: 'yourdbname',
            port: 1433,
            options: { requestTimeout: 350000, encrypt: true },
        },
        pool: {
            min: 0,
            max: 15,
        },
    });
    

    我的测试结果。

    【讨论】:

      【解决方案2】:

      如果您要对数据库进行更多查询,则不应致电 knex.destroy()

      knex.destroy() 调用移动到应用程序即将退出之前的某个位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-05
        • 2020-02-02
        • 1970-01-01
        • 2016-06-14
        • 1970-01-01
        相关资源
        最近更新 更多