NodeJS的Azure功能:在POST请求后检索documentDB生成的id

时间:2018-02-01 09:26:59

标签: javascript node.js azure azure-functions

我对AzureFunction有一个非常简单的问题。我想发一个POST请求并将客户端发送回新创建的对象,其中id由documentDB创建。 这就是我的代码:

function.json

   {
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [ "post" ],
      "route": "blocks"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "name": "block",
      "type": "documentDB",
      "direction": "out",
      "databaseName": "digitalnetworkacquisition",
      "collectionName": "blocks",
      "connection": "CosmosDBConnection"
    }
  ],
  "disabled": false
}

index.js



    module.exports = function (context, req) {
    context.log('Add block to CosmosDB.');
    if (req.body) {
        let block = req.body;
        context.bindings.block = block;
        context.res = {
            body: context.bindings.block,
            status: 201
        }
        context.done();
        return;
    }
    context.res = {
        body: undefined,
        status: 404
    };
    context.done();
   };




此代码将我的对象插入数据库,但将请求的主体发送回客户端,这是正常的,因为该行:

context.bindings.block = block;

那不是我想要的。我想从数据库中检索插入的对象并将其发送回客户端,以获得创建的ID。我不知道该怎么做。有什么建议吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码。 创建文档时,应传递以下参数。

  • collLink:集合的url = dbLink + collectionId
  • documentDefinition:
  • 错误:错误回调
  • 文件:已创建文件

然后,您可以使用document.id

获取已创建文档的ID
collLink = dbLink + '/colls/' + collectionId;

function insertDocuments(collLink, callback) {

    client.createDocument(collLink, documentDefinition, function (err, document) {
            if (err) {
                console.log(err);

            } else {
                console.log('created ' + document.id);

            }
        });

}   

有关带有Node.js的documentDb的更多示例,您可以访问此repo:https://github.com/Azure/azure-documentdb-node/blob/ef53e5f6707a5dc45920fb6ad54d9c7e008a6c18/samples/DocumentDB.Samples.DocumentManagement/app.js#L153-L177

答案 1 :(得分:0)

我知道这已经回答了一段时间但是应该可以在对Azure功能(AF)的调用中设置id,或者在AF中添加它。鲜为人知的事实,但id通常由SDK生成客户端,除非提供了一个。使用基础REST API时,创建没有文档的文档是错误的。

加载DocumentDB SDK并使用该GUID生成器或从开源SDK代码中提取代码并将其粘贴到AF中。

getGUID = require('documentdb').Base.generateGuidId