【问题标题】:Understanding Mongoose connections in Azure Function了解 Azure Function 中的 Mongoose 连接
【发布时间】:2020-08-07 17:28:50
【问题描述】:

您能否创建一个 Mongoose 连接并将其与您的所有功能一起使用?

我正在使用 Azure Functions 创建一个无服务器 API,该 API 使用 Mongoose 连接到数据库。我正在尝试了解我的 API 和 Mongoose 连接之间的关系。

我之前的理解是每个函数都必须建立自己与数据库的连接。但是我注意到我的代码中有一些奇怪的行为。当我在一个函数中打开一个连接时,我可以在任何其他函数中访问该连接。这是预期的行为吗?示例:

功能A

...
const mongoose = require('mongoose');
const User = require('../models/UserModel');
...

// Connect to database
mongoose.connect(process.env.CosmosDBConnectionString, {
  useNewUrlParser: true,
  useUnifiedTopology: true
});
mongoose.connection.on('connected', () => {
  console.log('Mongoose has connected.');
});

module.exports = async function (context, req) {
...
}

功能 B

const mongoose = require('mongoose');
const User = require('../models/UserModel');

module.exports = async function (context, req) {
  if (mongoose.connection.readyState == 1) {
    context.log("Mongoose is connected.");
    // readyState == 1 indicates connection is open. This code runs.
  }
  
  await User.findOne({ email: req.query.email }).then(user => {
      // I successfully retrieve user from the database    
  })
...  
}


请注意,连接是在函数 A 中建立的,但在函数 B 中使用。如果这是预期的,在一个函数中建立连接并在我的所有 API 中使用它是好还是坏的做法?

【问题讨论】:

    标签: node.js mongodb azure mongoose azure-functions


    【解决方案1】:

    这是默认行为:Functions in a function app share resources. Among those shared resources are connections: HTTP connections, database connections, xxxx。您可以参考这个doc了解更多详情。

    并且为了一个好的做法(对于您当前的解决方案,函数B依赖于函数A并不好),您最好创建一个单独的.js文件,用于连接数据库,然后调用它每个函数,就像在这个 article 中一样。

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多