我正在按照pluralsight创建-HTTP触发器,从路由数据中查找ID 该课程有点过时,因此无法按预期工作。 (示例端点可读,但在新版本中不起作用)
我按照 Microsoft 文档并使用新版本执行相同操作
const { app, input } = require('@azure/functions');
const cosmosInput = input.cosmosDB({
databaseName: 'ToDoItems',
collectionName: 'Items',
id: '{id}',
partitionKey: '{partitionKeyValue}',
connectionStringSetting: 'CosmosDBConnection',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
route: 'todoitems/{partitionKeyValue}/{id}',
extraInputs: [cosmosInput],
handler: (request, context) => {
const toDoItem = context.extraInputs.get(cosmosInput);
if (!toDoItem) {
return {
status: 404,
body: 'ToDo item not found',
};
} else {
return {
body: `Found ToDo item, Description=${toDoItem.Description}`,
};
}
},
});
当然文档中有错误(connectionStringSetting和collectionName应该是connection和containerName)
但调用如下
调用WebRequest http://localhost:7071/api/todo/2/2
关于我的 Cosmos 模拟器 - 容器指定分区键为 = /id
上面的网址对我来说看起来不太好,重复的路径。
我必须使用partitionkey,我必须使用id。所以我不确定如何使端点变得更好。 像http://localhost:7071/api/todo/2
请指教
如MSDOC中所述,对于分区容器,必须传递分区键。
当集合被分区时,查找操作还必须指定分区键值。
为了避免在路线中使用重复的 Id 和 分区键 值,请按照以下步骤操作:
示例:
{
"id":"1",
"key":"2",
"Description":"Hello World"
}
这会生成具有上传的 Json 文件中定义的 id 和 key 的新项目。
代码片段:
const { app, input } = require('@azure/functions');
const cosmosInput = input.cosmosDB({
databaseName: 'db1',
containerName: 'container1',
id: '{id}',
partitionKey: '{partitionKeyValue}',
connection: 'CosmosDBConnection'
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
route: 'Items/{partitionKeyValue}/{id}',
extraInputs: [cosmosInput],
handler: (request, context) => {
const toDoItem = context.extraInputs.get(cosmosInput);
if (!toDoItem) {
return {
status: 404,
body: 'Item not found',
};
} else {
return {
body: `Found Item, Description=${toDoItem.Description}`,
};
}
},
});
控制台响应:
[2024-04-22T11:56:37.019Z] Worker process started and initialized.
Functions:
httpTrigger1: [GET,POST] http://localhost:7071/api/Items/{partitionKeyValue}/{id}
For detailed output, run func with --verbose flag.
[2024-04-22T11:56:59.194Z] Executing 'Functions.httpTrigger1' (Reason='This function was programmatically called via the host APIs.', Id=d8fdefe9-5643-4c5e-b32d-44f353e75fd2)
[2024-04-22T11:57:03.143Z] Executed 'Functions.httpTrigger1' (Succeeded, Id=d8fdefe9-5643-4c5e-b32d-44f353e75fd2, Duration=4028ms)
输出: