node-mssql使用连接池连接超时时如何取消自动重连

发布于 2022-09-11 15:19:41 字数 1391 浏览 13 评论 0

题目描述

连接池连接成功后,执行数据库操作时连接超时,如何配置才能直接返回错误,而不是一直在尝试重新连接

相关代码

const to = require('await-to-js').default;
const sql = require('mssql');
const timeOut = require('../utils/timeOut');

const config = {
  user: 'sa',
  password: '123',
  server: '127.0.0.1',
  database: 'test',
  port: 1433,
  appName: 'node-test',
  connectionTimeout: 5000,  //连接timeout,单位ms 默认 15000
  requestTimeout: 5000,//请求timeout,单位ms默认15000
  //parseJSON: true,  //将json数据集转化成json obj
  options: {
    encrypt: false // 是否加密连接,如果在Windows Azure上使用,设置为true
  },
  pool: {
    max: 100,
    min: 0,
    idleTimeoutMillis: 30000  //设置关闭未使用连接的时间,单位ms默认30000
  }
};

(async () => {
  let err, pool, result;
  for (; ;) {
    [err, pool] = await to(new sql.ConnectionPool(config).connect());
    if (!err) {
      pool.on('error', err => {
        console.error(err.message);
      });
      console.log(`数据库连接成功!`);
      console.log(`SQL服务器地址:${config.server}`);
      break;
    } else if (pool !== undefined) {
      pool.close();
    }
    console.error(err.message);
    console.error(`数据库连接失败,5秒后重新连接...`);
    await timeOut(config.connectionTimeout);
  }
  // 此时将SQL Server服务关闭,下面的查询连接超时不会立即返回错误,而是一直在尝试重新连接,如何配置才能直接返回错误
  await timeOut(15000);
  [err, result] = await to(pool.query`SELECT 1`);
  // 需要超时后直接返回错误
  console.log(err, result);
})();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文