Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript使用Azure函数重用SQL server数据库连接_Javascript_Azure Functions - Fatal编程技术网

使用Javascript使用Azure函数重用SQL server数据库连接

使用Javascript使用Azure函数重用SQL server数据库连接,javascript,azure-functions,Javascript,Azure Functions,我无法从用Javascript编写的Azure函数中找到有关如何管理SQL server数据库连接的清晰信息 我正在使用连接池代码- const pool = new sql.ConnectionPool(config); const poolConnect = pool.connect(); pool.on('error', err => { // ... error handler }) 我正在使用执行查询的函数中的poolConnect对象 export const se

我无法从用Javascript编写的Azure函数中找到有关如何管理SQL server数据库连接的清晰信息

我正在使用连接池代码-

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功能中使用相同的连接池。

在根路径下创建两个名为config和toolkit的文件夹。将您的
db.js
放在
config
文件夹中,并创建一个sql帮助器类,以便在toolkit文件夹中导出名为
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
code,调用
ExecSqlQuery
执行
sqlstrings

如果我的回复有帮助,请将其作为答案接受(单击回复旁边的标记选项,将其从灰色切换为填充),请参阅“谢谢”。它的工作,只是想澄清一件事,将所有我的azure功能将使用相同的连接每一次。我不想每次都为每个azure功能创建新连接我的答案只是一个示例代码,您需要自己改进db.js中的内容并导出一个sqlclient。连接到数据库时,请注意异常处理,并记住处置connect。请参阅:
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
    };
}