如何使用 JavaScript 从 Azure Functions 连接到 Microsoft SQL 服务器?

How to connect to Microsoft SQL Server from Azure Functions using JavaScript?

我们正在 JavaScript 使用无服务器框架开发函数应用程序并将其部署到 Azure。

我们正在从 Microsoft SQL Server 2014 数据库中提取数据,使用无服务器离线插件和 VPN 在本地环境中测试功能时一切顺利。这是建立连接的代码:

const mssql = require("mssql");

const sqlConfig = {
  user: process.env["DB_USER"],
  password: process.env["DB_PWD"],
  database: process.env["DB_NAME"],
  server: process.env["DB_HOST"],
  pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 30000,
  },
  options: {
    encrypt: true, // for azure
    trustServerCertificate: false, // change to true for local dev / self-signed certs
  },
};

// pool-manager.js
const pools = new Map();

module.exports = {
  get: (name) => {
    if (!pools.has(name)) {
      const pool = new mssql.ConnectionPool(sqlConfig);
      // automatically remove the pool from the cache if `pool.close()` is called
      const close = pool.close.bind(pool);
      pool.close = (...args) => {
        pools.delete(name);
        return close(...args);
      };
      pools.set(name, pool.connect());
    }
    return pools.get(name);
  },

  closeAll: () =>
    Promise.all(
      Array.from(pools.values()).map((connect) => {
        return connect.then((pool) => pool.close());
      })
    ),
};

我们也在使用 Key Vault 的引用,它们工作正常。

问题是部署函数时,从未建立与数据库的连接。这是我得到的错误:

{
  "code": "ESOCKET",
  "originalError": {
    "code": "ESOCKET"
  },
  "name": "ConnectionError"
}

所以,我的问题是:必须在 Azure 中完成什么或必须在我们的代码中更改什么才能允许此连接?

谢谢

您的 MS SQL 2014 服务器托管 on-prem/on VNET 后面的 VM 吗?

如果是这样,您将需要将 Function App 与该虚拟网络集成。参见 Microsoft guide