使用 Javascript 通过 Azure Functions 重用数据库连接

Ham*_*son 0 javascript mongoose mongodb azure-functions

我无法从用 Javascript 编写的 Azure 函数中找到有关如何管理数据库连接(在我的例子中是 MongoDB)的明确信息。

下面的 Microsoft 文档说不要使用 C# 中的静态变量为每个函数调用创建连接,使用 .NET Framework Data Provider for SQL Server,池由客户端连接处理。它没有描述如何在 Javascript 中执行此操作。

https://docs.microsoft.com/en-us/azure/azure-functions/manage-connections

此处描述了创建全局变量以在调用之间保存数据库客户端的解决方案,但作者不确定这是正确的方法。

http://thecodebarbarian.com/getting-started-with-azure-functions-and-mongodb.html

有没有人在生产中使用过它或了解这是否是正确的方法?

Mar*_*kXA 5

是的,在静态变量中存储单个 SqlConnection 实例的 C#/SQL 和在全局变量中存储单个 Db 实例的 JS/MongoDB 之间存在非常接近的等价性。Azure Functions 中 JS/MongoDB 的基本模式是(假设您是最新的 async/await - 或者您可以根据链接的文章使用回调):

// 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 ..
};
Run Code Online (Sandbox Code Playgroud)

这意味着您只能为每个主机实例实例化一个 Db 对象。请注意,这不是每个 Function App 的一个 - 如果您使用专用的应用服务计划,那么您在计划中指定的实例数量将有所不同,如果您使用的是消耗计划,则它会有所不同取决于您的应用程序有多忙。