为了让整个Function app共享一个pool,我们需要把初始化部分放到一个共享模块中。 Christiaan Westerbeek 使用mssql 发布了wonderful solution,在这方面Function 应用和Web 应用没有太大区别。
我建议使用mssql(在内部使用tedious 和generic-pool)而不是tedious-connection-pool,因为tedious-connection-pool 似乎已经有2 年没有更新了。
将连接代码放入poolConfig.jsSharedLib文件夹下。
const sql = require('mssql');
const config = {
pool:{
max:50 // default: 10
},
user: '',
password: '',
server: '',
database: '',
options: {
encrypt: true // For Azure Sql
}
};
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
}
并加载模块以连接到sql。我们使用 await 来获取 ConnectionPool 函数应该是异步的(默认为 v2 js 函数)。
const { poolPromise } = require('../SharedLib/poolConfig');
module.exports = async function (context, req) {
var pool = await poolPromise;
var result = await pool.request().query("");
...
}
请注意,如果 Function app 使用多个实例进行横向扩展,也会为每个实例创建新池。