Azure-Function-Express-无法从* segments解析URI组件

时间:2018-10-03 18:04:08

标签: node.js azure-functions azure-cosmosdb

我正在使用azure-function-express节点模块。该文档提到了{*segments}的使用,但没有提供太多上下文信息。

这是我的function.json文件的样子:

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "route": "{*segments}",
      "methods": [
        "get"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "cosmosDB",
      "name": "inputDocument",
      "databaseName": "GBuckets",
      "collectionName": "buckets",
      "sqlQuery": "select *  from GBuckets c join b in c.buckets where b.bucketid = {bucketId}",
      "connectionStringSetting": "bucketsdb",
      "direction": "in"
    }

  ]
}

bucketId应该作为{*segments}的一部分出现,我的node.js代码可以处理它。

但是,当我尝试运行此代码时,它会引发以下错误:

Exception while executing function: Functions.func_name. System.Private.CoreLib: The given key 'bucketId' was not present in the dictionary.

很显然,它无法解析function.json文件中的'bucketId'。 我该如何解决而不必走CosmosClient路线?

谢谢。

1 个答案:

答案 0 :(得分:0)

这可能不适用于azure-functions-express。除非已命名,否则Azure Functions无法从路径推断出什么“ bucketId”。 azure-functions-express需要通配符访问,因此不兼容。

如果您想继续使用azure-functions-express,我建议直接使用Cosmos SDK。它有一个新版本(@ azure / cosmos),它具有Promise / etc等现代功能。这真的很好。 (但是我有偏见,因为我写了它...)