Функция Azure — CosmosDB с отключенной базой данных Mongoose

#mongoose #azure-functions #azure-cosmosdb

#mongoose #azure-функции #azure-cosmosdb

Вопрос:

я прошу вашего совета по разработке приложения для функции Azure. я использую CosmosDB с /enableMongoDBENdpoint. Я хотел бы знать, нужно ли мне отключать базу данных для каждой из моих функций Azure? Вот пример одного из моих кодов, использующих Node.JS в функции Azure:

 const { connectDB, disconnectDB } = require('../config/db');



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


        const {
          testData
        } = req.body;


        const addTestData = {
           testData
        };
        

          //
         //open MongoDB Connection, each azure function will call this function
        //

        connectDB();
        /********************/
        /*
         ## connectDB code commented for clarity ##
       
           const connectDB = async () => {
             try {
               await mongoose.connect(db, {
               useNewUrlParser: true,
               useCreateIndex: true,
               useFindAndModify: false
              });
           } catch (err) {
              console.error(err.message);
              //Exit process with failure
              process.exit(1);
          }
       };
     
   */
     /*********************/
       
        //
       // Remove code that do the usual DB add
      //   

       //
      // send success to clien
     //
      context.json.send({msg: 'Success'});
    }
    catch (err) {

        context.res.status(500).send('Server Error'   err.message);
    }
    finally {
 
        //do i need to disconnect the DB? 
         disconnectDB();

        /**************************/
        # Code for disconnectDB()         
        const disconnectDB = async () => {
              try {
                   mongoose.connection.close();
                   console.log('Disconnect from DB');
              } 
              catch (err) {
                 console.log(err);
              }
           };
         */
       /***********************/
    }
};
  

Ответ №1:

Вы разрабатываете свое решение на портале Azure или используете Visual Studio? Предпочтительнее Visual Studio, но я приведу вам пример каждого:

  • Создайте функцию, запускаемую Azure Cosmos DB (ссылка)

Узнайте, как создать функцию, запускаемую при добавлении или изменении данных в Azure Cosmos DB. Чтобы узнать больше о Azure Cosmos DB, см. Azure Cosmos DB: Бессерверные вычисления базы данных с использованием функций Azure.

Примечание: Serverless database computing using Azure Functions Документ здесь очень полезен, как и приведенный ниже документ Azure Functions версии 2.x (Функции 2.x и выше).

Эта ссылка предназначена для функций Azure версии 2.x и выше. Для получения информации о том, как использовать эти привязки в функциях 1.x, см. Привязки базы данных Azure Cosmos для функций Azure 1.x .

Первоначально эта привязка называлась DocumentDB. В функциях версии 2.x и выше триггер, привязки и пакет называются Cosmos DB.

И в функции Azure версии 2.x вам не нужно явно закрывать соединение. Вы просто вызываете результат. Пожалуйста, смотрите: Привязка ввода Azure Cosmos DB для функций Azure 2.x и выше

 using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
 {
      public static class DocByIdFromQueryString
      {
    [FunctionName("DocByIdFromQueryString")]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequest req,
        [CosmosDB(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            Id = "{Query.id}",
            PartitionKey = "{Query.partitionKey}")] ToDoItem toDoItem,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        if (toDoItem == null)
        {
            log.LogInformation($"ToDo item not found");
        }
        else
        {
            log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
        }
        return new OkResult();
     }
  }
}
  

Комментарии:

1. Спасибо за ваш ответ. в принципе, я замечаю, что мне не следует закрывать соединение.