#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. Спасибо за ваш ответ. в принципе, я замечаю, что мне не следует закрывать соединение.