【问题标题】:Reusing SQL server Database Connections With Azure Functions Using Javascript使用 Javascript 将 SQL Server 数据库连接与 Azure Functions 重用
【发布时间】:2021-03-09 15:25:54
【问题描述】:

我找不到有关如何通过用 Javascript 编写的 Azure 函数管理 SQL 服务器数据库连接的明确信息。

我正在使用连接池代码 -

const pool = new sql.ConnectionPool(config);
const poolConnect = pool.connect();

pool.on('error', err => {
    // ... error handler
})

我正在使用执行查询的函数中的 poolConnect 对象

export const selectQuery = function() {
  const connectionPool = await mssqlDBPoolConnect;
  const request = connectionPool.request();
  await request.query('select query');
}

那么如何在所有 azure 函数中使用相同的连接池。

【问题讨论】:

标签: javascript azure-functions


【解决方案1】:

在根路径下创建两个名为 config 和 toolkit 的文件夹。将您的db.js 放入config 文件夹中,并创建一个sql 帮助类以将名为sqltools.js 的函数导出到工具包文件夹中。

因此,您可以通过在函数代码中调用sqltools 来使用相同的连接池。此步骤可帮助您减少在每个函数中使用相同的代码。

尝试使用下面的db.js 代码:

const sql = require('mssql')
const config = {
    user: 'yourusername',
    password: 'yourpassword',
    server: 'yoursqlserver.database.windows.net', // You can use 'localhost\\instance' to connect to named instance. Do not use TCP.
    database: 'yourdb',
    "options": {
        "encrypt": true,
        "enableArithAbort": true
    }
}

const poolPromise = new sql.ConnectionPool(config)
  .connect()
  .then(pool => {
    console.log('Connected to MSSQL')
    return pool
  })
  .catch(err => console.log('Database Connection Failed! Bad Config: ', err))

module.exports = {
  sql, poolPromise
}

sqltools.js 类:

const { poolPromise } = require('../config/db')

module.exports.sqltools = {
    ExecSqlQuery : async function(arg){
        const pool = await poolPromise
        //SELECT *FROM SYSOBJECTS WHERE xtype = \'U\'
        var result=null;
        try {
            result = await pool.request()
            .query(arg)
        } catch (error) {
            console.log(error.message);
        } 
        return result;
    },
    ExecProce : function (arg2, arg3, arg4){
        console.log(arg2,arg3,arg4);
    }
}

这是我的 HttpTrigger1 index.js 代码,调用 ExecSqlQuery 执行 sqlstrings

const { sqltools } = require('../toolkit/sqltools');

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    var result=null;
    try {
        // call ExecSqlQuery func
        result = await sqltools.ExecSqlQuery('SELECT *FROM SYSOBJECTS WHERE xtype = \'U\'');
    } catch (error) {
        console.log(error.message);
    } 
    
    const responseMessage ="Func 1 Result : TableName= " + result.recordset[0].name;

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

【讨论】:

  • 谢谢。它的工作,只是想澄清一件事,我所有的天蓝色功能每次都会使用相同的连接。我不想每次都为每个 azure 函数创建新连接
  • 我的回答只是一个示例代码,你需要自己改进db.js中的内容并导出一个sqlclient。连接数据库时,注意异常处理,记得dispose connect。参考这个:developer.okta.com/blog/2019/03/11/node-sql-server
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 2021-08-12
相关资源
最近更新 更多