我无法通过Javascript编写的Azure函数找到有关如何管理数据库连接(在我的情况下为MongoDB)的明确信息。
下面的Microsoft文档说,不要通过使用SQL Server的.NET Framework数据提供程序在C#中使用静态变量来为函数的每次调用创建连接,并且池由客户端连接处理。它没有描述如何使用Javascript执行此操作。
https://docs.microsoft.com/en-us/azure/azure-functions/manage-connections
这里介绍了一种创建全局变量以在调用之间保存数据库客户端的解决方案,但是作者不确定这是正确的方法。
http://thecodebarbarian.com/getting-started-with-azure-functions-and-mongodb.html
有人在生产中使用过此软件,还是知道这是否正确?
答案 0 :(得分:1)
是的,C#/ SQL在静态变量中存储单个SqlConnection实例与在全局变量中存储单个Db实例的JS / MongoDB之间存在非常接近的对等关系。 Azure Functions中JS / MongoDB的基本模式是(假设您是最新的异步/等待-或者您可以根据链接的文章使用回调):
// getDb.js
let dbInstance;
module.exports = async function() {
if (!dbInstance) {
dbInstance = await MongoClient.connect(uri);
}
return dbInstance;
};
// function.js
const getDb = require('./getDb.js');
module.exports = async function(context, trigger) {
let db = await getDb();
// ... do stuff with db ..
};
这意味着每个主机实例仅实例化一个Db对象。请注意,这不是每个功能应用程序一个-如果您正在使用专用的应用程序服务计划,则计划中将指定数量的实例;如果您使用的是消费计划,则它会有所不同取决于您的应用程序的繁忙程度。