Надеюсь, у тебя все хорошо. Я столкнулся с ошибкой в библиотеке aws amplify под названием aws-amplify/api
.
Я настроил сообщение и вызов, которые работают успешно. Кроме того, когда я запускаю вызов get с определенным параметром — идентификатором клиента, он возвращает только один результат, и этот результат — это информация о клиенте с соответствующим идентификатором клиента.
Когда я пытаюсь использовать ту же конечную точку, что и функция «получить один», которую я настроил для удаления, это не работает. Я получаю ошибку 404, что меня сбивает с толку, поскольку существует та же конечная точка для запроса «получить один», который работает успешно.
Я просмотрел документацию AWS по вызову del
в библиотеке API amplify. Мой код во многом такой же, как тот код, и подходит для всех интенсивных целей. Я не понимаю, почему конечная точка действительна для вызова get, но недействительна для вызова удаления.
Насколько мне известно, профиль, который я использую на своем компьютере, имеет все привилегии, которые может иметь профиль пользователя. Действительно, я использовал максимально широкие права доступа для своего личного пользователя в своей учетной записи AWS.
Я попытался просмотреть ряд вопросов, но все они касаются GraphQL, связанного с этой темой, или невозможности удалить ресурс amplify, очевидно, это не очень помогает.
Ниже я прикрепил соответствующий код для двух функций. Функция, которая работает с одной и той же конечной точкой, функция «получить» и функция «удалить» — та, которая не работает. Тем не менее, весь репозиторий git находится здесь, если вы обнаружите, что вам нужна дополнительная информация для изучения этого.
GetOneCustomer — Работает
async function getOneCompany() {
try {
const restOperation = del({
apiName: GladwyneAPIName,
path: `${GladwynePath}/1`,
});
console.info("Get One Worked");
const { body } = await restOperation.response;
const response = await body.json();
console.info("Response Recieved: ", response);
return response;
} catch (error) {
console.info("Get Call Failed: ");
console.info(error.response.body);
}
}
Удалить одного клиента – не работает
async function deleteOneCustomer(customer) {
try {
const returnedStatusCode = del({
apiName: GladwyneAPIName,
path: `/Gladwyne/Customer/${customer.CustomerId}`,
options: {
queryParams: {
CustomerId: customer.CustomerId,
},
},
});
const { body } = await returnedStatusCode.response;
const returnedResult = await body.json();
console.info("Returned Result: ", returnedResult);
return returnedResult;
} catch (error) {
if (error instanceof ApiError) {
if (error.response) {
const { statusCode, headers, body } = error.response;
console.error(
`Received ${statusCode} error response with payload: ${body}`
);
}
}
console.info("Plain old error message: ", error);
logger.error("Error from class: ", error);
}
}
Я получаю ответ, Unknown Error: Unknown Error
и это тоже
DELETE https://{ID}.execute-api.us-east-1.amazonaws.com/gladwyne/Gladwyne/Customer/3?CustomerId=3 404 (Not Found)
Когда я включаю расширенное ведение журнала, мне также возвращается этот объект. Вот оно чего стоит..
Received 404 error response with payload: <!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot DELETE /Gladwyne/Customer/3</pre>
</body>
</html>
Любые мысли/советы по этому вопросу будут оценены по достоинству.
Я столкнулся с той же проблемой и нашел решение, проверив сгенерированный код Lambda.
Вместо:
await del({
apiName: 'todo-api',
path: '/todo/1'
});
Сделай это:
await del({
apiName: 'todo-api',
path: '/todo/object/1'
});
The difference is the `object` word in the `path`. Honestly I don't exactly understand why the api is like this but it works.