#node.js #express #azure-web-app-service #postman #azure-cosmosdb
Вопрос:
Я пытаюсь работать с функцией УДАЛЕНИЯ маршрута. То, что я пытаюсь сделать, — это получить id
от req.params
и использовать его для удаления документа, связанного с этим конкретным id
. Я делюсь своим кодом ниже, который также содержит ошибку, которую я получаю. Может кто-нибудь, пожалуйста, сказать мне, почему я получаю эту ошибку? Я использую здесь CosmosDB.
app.delete('/:id', async(req, res) => {
try {
const { id } = req.params;
const dbResponse = await cosmosClient.databases.createIfNotExists({
id: databaseId
});
let database = dbResponse.database;
const { container } = await database.containers.createIfNotExists({id: containerId});
const docResponse = await container.item(id).delete();
console.log("Item deleted");
res.send(docResponse);
} catch (error) {
console.log(error);
res.status(500).send("Error with database query: " error.body);
}
})
ОШИБКА
{
code: 400,
body: '{"code":"BadRequest","message":"Message: {\"Errors\":[\"The partition key supplied in x-ms-partitionkey header has fewer components than defined in the the collection.\"]}\r\nActivityId: 2eefe53b-d025-4c50-b66d-6ff544ae1fd9, Request URI: /apps/d9dd667d-ffd4-45aa-ae65-801629672b13/services/7cabee75-7eb4-4732-8500-61a636907715/partitions/2bdc91e2-4247-4f18-a168-7efbb140f3e1/replicas/132642795034019191p, RequestStats: \r\nRequestStartTime: 2021-05-07T18:21:41.9351771Z, RequestEndTime: 2021-05-07T18:21:41.9351771Z, Number of regions attempted:1\r\nResponseTime: 2021-05-07T18:21:41.9351771Z, StoreResult: StorePhysicalAddress: rntbd://10.0.0.131:14300/apps/d9dd667d-ffd4-45aa-ae65-801629672b13/services/7cabee75-7eb4-4732-8500-61a636907715/partitions/2bdc91e2-4247-4f18-a168-7efbb140f3e1/replicas/132642795034019191p, LSN: 78, GlobalCommittedLsn: 78, PartitionKeyRangeId: 0, IsValid: True, StatusCode: 400, SubStatusCode: 1001, RequestCharge: 0, ItemLSN: -1, SessionToken: -1#78, UsingLocalLSN: False, TransportException: null, ResourceType: Document, OperationType: Delete\r\n, SDK: Microsoft.Azure.Documents.Common/2.11.0"}',
headers: {
'transfer-encoding': 'chunked',
'content-type': 'application/json',
'content-location': 'https://pod01-dev-cus-db-eastus.documents.azure.com/dbs/db/colls/partnership/docs/4040',
server: 'Microsoft-HTTPAPI/2.0',
'x-ms-activity-id': '2eefe53b-d025-4c50-b66d-6ff544ae1fd9',
'x-ms-last-state-change-utc': 'Tue, 04 May 2021 21:27:07.912 GMT',
'x-ms-schemaversion': '1.11',
lsn: '78',
'x-ms-request-charge': '0',
'x-ms-quorum-acked-lsn': '78',
'x-ms-substatus': '1001',
'x-ms-current-write-quorum': '3',
'x-ms-current-replica-set-size': '4',
'x-ms-documentdb-partitionkeyrangeid': '0',
'x-ms-xp-role': '1',
'x-ms-global-committed-lsn': '78',
'x-ms-number-of-read-regions': '0',
'x-ms-transport-request-id': '9',
'x-ms-cosmos-llsn': '78',
'x-ms-cosmos-quorum-acked-llsn': '78',
'x-ms-session-token': '0:-1#78',
'x-ms-request-duration-ms': '0.216',
'x-ms-serviceversion': 'version=2.11.0.0',
'strict-transport-security': 'max-age=31536000',
'x-ms-gatewayversion': 'version=2.11.0',
date: 'Fri, 07 May 2021 18:21:41 GMT',
'x-ms-throttle-retry-count': 0,
'x-ms-throttle-retry-wait-time-ms': 0
},
activityId: '2eefe53b-d025-4c50-b66d-6ff544ae1fd9',
substatus: 1001,
requestHeaders: {
'Cache-Control': 'no-cache',
'x-ms-version': '2018-06-18',
'x-ms-consistency-level': 'Session',
'User-Agent': 'win32/10.0.19042 Nodejs/v14.16.1 azure-cosmos-js/2.1.7',
'x-ms-date': 'Fri, 07 May 2021 18:21:41 GMT',
Accept: 'application/json',
authorization: 'type=master&ver=1.0&sig=+MyYlVwpdgUWtXinv7F/oZVwcVglOfO/nS8hwW1sY4U='
}
}
Я понятия не имею, что такое ошибка, к тому же Почтальон дает мне что-то другое.
ОШИБКА ПОЧТАЛЬОНА
Error with database query: {"code":"BadRequest","message":"Message: {"Errors":["The partition key supplied in
x-ms-partitionkey header has fewer components than defined in the the collection."]}rnActivityId:
2eefe53b-d025-4c50-b66d-6ff544ae1fd9, Request URI:
/apps/d9dd667d-ffd4-45aa-ae65-801629672b13/services/7cabee75-7eb4-4732-8500-61a636907715/partitions/2bdc91e2-4247-4f18-a168-7efbb140f3e1/replicas/132642795034019191p,
RequestStats: rnRequestStartTime: 2021-05-07T18:21:41.9351771Z, RequestEndTime: 2021-05-07T18:21:41.9351771Z, Number
of regions attempted:1rnResponseTime: 2021-05-07T18:21:41.9351771Z, StoreResult: StorePhysicalAddress:
rntbd://10.0.0.131:14300/apps/d9dd667d-ffd4-45aa-ae65-801629672b13/services/7cabee75-7eb4-4732-8500-61a636907715/partitions/2bdc91e2-4247-4f18-a168-7efbb140f3e1/replicas/132642795034019191p,
LSN: 78, GlobalCommittedLsn: 78, PartitionKeyRangeId: 0, IsValid: True, StatusCode: 400, SubStatusCode: 1001,
RequestCharge: 0, ItemLSN: -1, SessionToken: -1#78, UsingLocalLSN: False, TransportException: null, ResourceType:
Document, OperationType: Deletern, SDK: Microsoft.Azure.Documents.Common/2.11.0"}
Ответ №1:
Вы пытались использовать вместо этого приведенный ниже код? Официальный образец Azure здесь.
const docResponse = await container.item(id, partitionKey).delete();
Я проверил свою сторону, и это сработало.
Комментарии:
1. Спасибо за вашу помощь, я все понял.