我无法找到有关如何从用 Javascript 编写的 Azure 函数管理数据库连接(在我的例子中为 MongoDB)的明确信息。
下面的 Microsoft 文档表示,不要使用 C# 中的静态变量(使用 .NET Framework Data Provider for SQL Server)为函数的每次调用创建连接,并且池由客户端连接处理。它没有描述如何在 Javascript 中执行此操作。
https://learn.microsoft.com/en-us/azure/azure-functions/manage-connections
此处描述了创建全局变量以在调用之间保存数据库客户端的解决方案,但作者不确定这是正确的方法。
http://thecodebarbarian.com/getting-started-with-azure-functions-and-mongodb.html
有人在生产中使用过它或了解这是否是正确的方法?
最佳答案
是的,C#/SQL 在静态变量中存储单个 SqlConnection 实例与 JS/MongoDB 在全局变量中存储单个 Db 实例之间存在非常接近的等效性。 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 对象。请注意,这不是每个功能应用程序 - 如果您使用专用的应用程序服务计划,那么将有您在计划中指定的实例数量,如果您使用消费计划,那么它会有所不同取决于您的应用程序的繁忙程度。
关于javascript - 使用 Javascript 重用 Azure Functions 的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422257/