Общие сведения о подключениях Mon goose в функции Azure - PullRequest
1 голос
/ 06 августа 2020

Можете ли вы создать одно соединение Mon goose и использовать его со всеми вашими функциями?

Я создаю бессерверный API с использованием Azure функций, которые подключаются к базе данных с помощью Mon goose. Я пытаюсь понять взаимосвязь между моим API и соединением Mon goose.

Мое предыдущее понимание заключалось в том, что каждая функция должна sh устанавливать свое собственное соединение с базой данных. Однако я замечаю странное поведение в своем коде. Когда я открываю соединение в одной функции, я могу получить доступ к этому соединению в любой другой функции. Это ожидаемое поведение? Пример:

Функция 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. Если это ожидается, было бы хорошей или плохой практикой установить sh соединение в одной функции и использовать его во всех моих API?

1 Ответ

0 голосов
/ 07 августа 2020

Это поведение по умолчанию: Functions in a function app share resources. Among those shared resources are connections: HTTP connections, database connections, xxxx. Вы можете обратиться к этому do c для получения более подробной информации.

И для хорошей практики (для вашего текущего решения нехорошо, чтобы функция B зависела от функции A), вы Лучше создать отдельный .js файл, который используется для подключения БД, а затем вызывать его в каждой функции, как в этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...