В проекте функций TypeScript я создал триггерную функцию HTTP, которая считывает данные элемента из CosmosDB с использованием привязки ввода и пытается обновить элементы с использованием привязки вывода.
Ожидаемый поток:
HTTP-триггер -> выполнение функции и чтение элемента из БД через привязку ввода -> обновить или создать элемент через привязку вывода -> возврат HTTP-ответа (JSON)
Код функции:
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest, productItem: any, productToUpdate: any): Promise<void> {
context.log('HTTP trigger function processed a request.');
productToUpdate = JSON.stringify({
"id" : productItem.id,
"name" : "Changed by output binding"
})
context.res = {
status: 200,
body: {
id: context.bindingData.productId,
name: "Updated product"
}
};
};
Если я вызову функцию на /api/products/1234
, она будет выполнена правильно, и productItem
будет считано из моей БД и содержит информацию об элементе с идентификатором "1234":
Изменение на productToUpdate
, однако, не имеет никакого эффекта. Содержимое БД остается без изменений. Я пытался использовать как JSON.stringify()
, так и обычный объект { "id": ... }
.
Нет сообщений об ошибках и указаний на сбой операции. Что я делаю неправильно? Как я могу отладить эту проблему?
Для справки, вот моя обязательная информация в функции. json:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
],
"route": "product/{productId}"
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"type": "cosmosDB",
"direction": "in",
"name": "productItem",
"databaseName": "maindb",
"collectionName": "products",
"connectionStringSetting": "CosmosDbConnectionString",
"id": "{productId}",
"partitionKey": "{productId}"
},
{
"type": "cosmosDB",
"direction": "out",
"name": "productToUpdate",
"databaseName": "maindb",
"collectionName": "products",
"createIfNotExists": "false",
"connectionStringSetting": "CosmosDbConnectionString"
}
],
"scriptFile": "../dist/products/index.js"
}