Вот моя проблема:
Я пытаюсь настроить триггер http, используя функции Azure в javascript.Я был в состоянии отправить эти данные в Cosmosdb, используя мою функцию POST.Пример элемента CosmosDB Я ищу:
{
"id": "POLL:FAVECOLORS:LM:LMBWZ18",
"partition": "POLL:LM",
"value": {
"name": "fave colors poll",
"question": "Which color do you like the most?",
"answers": [
{
"text": "Orange",
"count": 0
},
{
"text": "Yellow",
"count": 0
},
{
"text": "Blue",
"count": 0
}
]
},
"_rid": "<info>",
"_self": "<info>",
"_etag": "\"<info>\"",
"_attachments": "<info>/",
"_ts": <info>
}
Я пытаюсь получить эту информацию с помощью ввода в мою функцию Azure.Вот моя функция.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"route": "<MyURL>/{type}/{objname}/{brand}/{site}",
"methods": [
"get",
"post",
"patch"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"name": "CosmosSend",
"type": "documentDB",
"databaseName": "PropDB",
"collectionName": "WithoutCCN",
"createIfNotExists": false,
"connection": "<Connection-Info>",
"direction": "out"
},
{
"type": "documentDB",
"name": "documents",
"databaseName": "PropDB",
"collectionName": "WithoutCCN",
"connection": "<Connection-Info>",
"direction": "in",
"sqlQuery": "SELECT * FROM c WHERE c.id = {id}"
}
],
"disabled": false
}
Я не уверен, как я могу изменить формат моих запросов, чтобы он использовал параметры запроса для запроса вместо поиска "https: /// {type} / {objname} / {brand} / {site}? id = POLL: FAVECOLORS: LM: LMBWZ18 "
module.exports = function (context, req) {
var documents = context.bindings.documents;
var totalDocuments = documents.length;
var azureAppId = req.headers["azure-app-id"];
context.log('azure-app-id = ' + azureAppId);
var idx = '' + (req.params.type + ':' + req.params.objname + ':' + req.params.brand + ':' + req.params.site).toUpperCase();
var paritionx = '' + (req.params.type + ":" + req.params.brand).toUpperCase();
var valuex = req.body;
if (req.method === 'GET') {
context.log('Found '+ totalDocuments +' documents');
if(totalDocuments === 0)
{
context.done(null, createResult(200, 'application/json', "The
requested document was not found."));
}
else {
context.done(null, createResult(200, 'application/json', documents));
}
} else if (req.method === 'POST') {
if (typeof req.body === 'object') {
context.bindings.CosmosSend = JSON.stringify({
id: idx,
partition: paritionx,
value: valuex
});
context.done(null, createResult(201, 'application/json', req.body));
}
else {
context.done(null, createResult(400, 'text/plain', 'The message must be of type application/json.'));
}
Я попытался взять переменную 'idx' и вставить ее в запрос, поскольку он уже находится в том же формате, что иPOST отправляет 'id', но, поскольку он не является частью самой функции. json, он не может быть найден.Если я изменю запрос в функции на:
"sqlQuery": "SELECT * FROM c WHERE c.id = /"{TYPE}:{OBJNAME}:{BRAND}:{SITE}/""
и что-нибудь отдаленно похожее на то, что это не работает.Если я запихну то, что я ищу, именно в это:
"sqlQuery": "SELECT * FROM c WHERE c.id = \"POLL:FAVECOLORS:LM:LMBWZ18\""
Он найдет его идеально каждый раз, но только одну эту запись, и это не будет соответствовать цели запроса GET, включая его собственную информацию о цели.Я действительно ломал голову над этой проблемой, и любые советы действительно помогли бы.Я прочитал много документов Microsoft, связанных с функцией Azure и JavaScript, но ничего не помогло с этой конкретной проблемой.
Ожидаемыми результатами будет элемент в космосе, возвращаемый при получении запроса http GET из приложения-функции Azure.он будет искать элемент по информации, указанной в URL-адресе запроса.