Как вставить данные в базу данных Cosmos с помощью функционального приложения Azure JavaScript?

Я пытаюсь вставить данные из приложения функции Azure javascript в базу данных Cosmos. Это файл function.json

 {
 "bindings": [
  {
  "type": "cosmosDBTrigger",
  "name": "documents",
  "direction": "in",
  "leaseCollectionName": "leases",
  "connectionStringSetting": "CosmosDBConnection",
  "databaseName": "roi",
  "collectionName": "reports",
  "createLeaseCollectionIfNotExists": "true"
  },
  {
  "type": "http",
  "direction": "out",
  "name": "res"
  }
 ]
}

index.js имеет такой код.

module.exports = async function (context, documents) {
     if (!!documents && documents.length > 0) {
    context.log('Document Id: ', documents[0].id);
  }
 }

На изображениях ниже будет ошибка в приложении. введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

Есть ли какая-либо функция или запрос для вставки данных? данные запроса, поступающие от API, будут выглядеть так (они поступают в свойство запроса rawBody)

введите здесь описание изображения

Когда я извлекаю данные, все работает нормально.

{
  "name": "inputDocumentIn",
  "type": "cosmosDB",
  "databaseName": "roi",
  "collectionName": "reports",
  "sqlQuery": "SELECT * from reports r",
  "connectionStringSetting": "CosmosDBConnection",
  "direction": "in"
}

файл local.setting.json

{
"IsEncrypted": false,
"Values": {
 "AzureWebJobsStorage": "UseDevelopmentStorage=true",
 "AzureWebJobsDashboard": "",
 "FUNCTIONS_WORKER_RUNTIME": "node",
 "CosmosDBConnection": "AccountEndpoint=.....;"
 },
"Host": {
 "LocalHttpPort": 7071,
 "CORS": "*"
 }
}

С этим лазурным значением в файле local.setting.ts я получаю следующую ошибку. введите здесь описание изображения


person swapnil jain    schedule 04.12.2019    source источник
comment
Можете ли вы поделиться, какие пакеты Nuget у вас есть в вашем файле extensions.csproj?   -  person Matias Quaranta    schedule 04.12.2019
comment
‹ItemGroup› ‹PackageReference Include=Microsoft.Azure.WebJobs.Extensions.CosmosDB Version=3.0.1 /› ‹PackageReference Include=Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator Version=1.1.0 /› ‹/ItemGroup›   -  person swapnil jain    schedule 05.12.2019


Ответы (3)


Пожалуйста, проверьте, указывает ли строка подключения на правильную учетную запись, и проверьте, не было ли это вызвано брандмауэром и сетями. Перейдите в свою учетную запись Cosmos db на портале Azure и нажмите «Брандмауэр и виртуальные сети». Вы можете выбрать «Все сети» или «Выбранные сети» с вашим текущим IP-адресом.

person Hury Shen    schedule 05.12.2019
comment
но когда я получаю результат, он работает нормально. - person swapnil jain; 05.12.2019

Это звучит как какой-то конфликт зависимостей. Не могли бы вы выполнить dotnet clean в папке проекта, а затем убедиться, что все проекты (если у вас есть зависимости от проектов) имеют последнюю версию Microsoft.Azure.WebJobs.Extensions.CosmosDB пакет (сейчас 3.0.5)?

person Matias Quaranta    schedule 05.12.2019
comment
у вас есть репозиторий git для этой проблемы? - person swapnil jain; 06.12.2019
comment
Репозиторий github для расширения функций: github.com/Azure/azure-webjobs-sdk-extensions. - person Matias Quaranta; 06.12.2019

Решение вышеуказанной проблемы: я изменил файл function.json с помощью этого кода.

{
"bindings": [
 {
  "authLevel": "anonymous",
  "type": "httpTrigger",
  "direction": "in",
  "methods": [ "post" ],
  "name": "req"
 },
 {
  "type": "http",
  "direction": "out",
  "name": "res"
 },
 {
  "type": "cosmosDB",
  "name": "outputDocument",
  "databaseName": "roi",
  "collectionName": "reports",
  "createIfNotExists": true,
  "connectionStringSetting": "CosmosDBConnection",
  "direction": "out",
  "partitionKey": "/id"
  }
 ],
 "disabled": false
}

и запрос, поступающий из внешнего интерфейса, будет обрабатываться следующим образом.

  module.exports =  function (context, req) {
    if (req.body) {
    context.bindings.outputDocument = req.body;
    var responseBody = {};
    responseBody.message =  "Wow! data with  id '" + req.body.id + "' was created!";

    context.res = {
        status: 201, 
        body:responseBody
    };
   }
  else {
    context.res = {
        status: 400,
        body: { "message" : "Please pass a valid  object in the request body"}
    };
  }
 context.done();
 }
person swapnil jain    schedule 11.12.2019
comment
это ответ на вопрос - person swapnil jain; 11.12.2019