sqlQuery со строкой запроса в функциях Azure 2.x? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть приложение в функции 1.x, которое получает objId из строк запроса, запрашивает CosmosDb (привязка ввода), а затем выполняет оставшуюся часть работы.Тем не менее, я перевожу его в v2, и он не работает, как раньше: он запрашивает db, только если objId указан в шаблоне маршрута, но не если objId предоставляется в виде строки запроса (в v1 он работает дажеесли это предоставлено как строка запроса).Хотя моя функция .json почти такая же.Можете ли вы сказать мне, что не так, и как я могу сделать эту входную привязку для выполнения запроса SQL с помощью строки запроса?

Ниже приведено содержимое моего function.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "cosmosDB",
      "name": "obj",
      "databaseName": "mydb",
      "collectionName": "objects",
      "sqlQuery": "SELECT * FROM c where c.id = {objId}",
      "connectionStringSetting": "mydbstring",
      "direction": "in"
    }
  ],
  "disabled": false
}

И ниже приведен мой код функции

const client = new CosmosClient({
  endpoint: endpoint,
  auth: {
    masterKey: masterKey
  }
});

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

И ниже приведено содержимое моего proxies.json:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "Set Object state Id Proxy": {
            "matchCondition": {
                "route": "/obj/{objId}/state",
                "methods": [
                    "GET"
                ]
            },
            "backendUri": "http://localhost:7071/api/setobjstate?objId={objId}"

        }
}

Это работает так:

http://localhost:7071/games/bbbbb

Но как я могу заставить это работать таким образом?

http://localhost:7071/games?objId=bbbbbbbbb

1 Ответ

0 голосов
/ 11 декабря 2018

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

https://docs.microsoft.com/en-in/azure/azure-functions/functions-bindings-cosmosdb-v2#http-trigger-get-multiple-docs-using-sqlquery-c

По приведенной выше ссылке: «Триггер HTTP, найдите идентификатор из данных маршрута, используя SqlQuery (C #). В следующем примере показана функция C #, которая извлекает один документ.Функция запускается HTTP-запросом, который использует данные маршрута для указания идентификатора для поиска. Этот идентификатор используется для извлечения документа ToDoItem из указанной базы данных и коллекции

В примере показано, как использовать выражение привязки впараметр SqlQuery. Вы можете передавать данные маршрута в параметр SqlQuery, как показано, но в настоящее время вы не можете передавать значения строки запроса."

= = = = = = = = = == = = = = = = = = = = = = = = = = = = = = = = = =

Однако если вам нужно только получить документ по идентификатору, вы можете, кажется,в вашем function.json замените «sqlQuery»: «SELECT * FROM c, где c.id = {objId}» на «Id»: «{Query.id}» *

...