我对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。我不知道该怎么做。有什么建议吗?
非常感谢!
答案 0 :(得分:0)
您可以尝试使用此代码。 创建文档时,应传递以下参数。
然后,您可以使用document.id
获取已创建文档的IDcollLink = 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