Резюме: я использую javascript, сгенерированный aws-ampify, для отправки запросов и мутаций в конечную точку graphs AWS с бэкэндом dynamicodb.Запросы / мутации функционируют достаточно хорошо (они создают, получают и удаляют записи по назначению).Но они постоянно выдают ошибку в процессе:
"Условие запроса пропущено. Элемент схемы ключа: authorId (Сервис: AmazonDynamoDBv2; Код состояния: 400; Код ошибки: ValidationException;"
Мой код можетне слишком ли плохо, иначе почему он так хорошо работает? Тем не менее, я хотел бы избавиться от этой надоедливой ошибки или хотя бы понять ее. Почему происходит эта ошибка?
Подробности:
Мой API генерируется из точного файла schema.graphql, предоставленного в примере aws-aws-appsync-chat https://github.com/aws-samples/aws-appsync-chat
Соответствующая часть модели находится здесь ...
type User
@model
@auth(rules: [{ allow: owner, ownerField: "id", queries: null }]) {
id: ID!
username: String!
conversations: [ConvoLink] @connection(name: "UserLinks")
messages: [Message] @connection(name: "UserMessages")
createdAt: String
updatedAt: String
}
К сожалению, этот пример на самом деле не использует запросы и мутации, сгенерированные при помощи ampify. Вместо этого он использует рукописную схему в файле: src / graphql.js. Это верно. Сгенерированные запросы / мутациивключены в проект, но на самом деле не используются. Это было очень обидно для меня. Но моя вера была восстановлена (несколько), когда мне удалось переписать логику javascript, чтобы она функционировала (больше или меньше).ess) использование запросов и мутаций, которые были сгенерированы при помощи ampify.
В любом случае, первый шаг, который я предпринял, - это написать логику для (1) запроса таблицы пользователей, чтобы увидеть, существует ли запись для текущего авторизованного пользователя.и (2) создание записи, если авторизованного пользователя там нет.Для получения бонусных баллов я также написал логику для (3) удаления записи пользователя из базы данных.
Работая внутри компонента vuejs, я написал эти методы ...
methods: {
async DeleteUserRecord() {
try {
let id = store.state.user.username;
const input = { id: id };
await API.graphql(graphqlOperation(deleteUser, { input }));// works but throws errors
} catch (err) {
console.log('Error deleting user record:', err)
}
},
async GetUserRecord() {
try {
let id = store.state.user.username;
const result = await API.graphql(graphqlOperation(getUser, { id }));// works but throws errors
console.log(result);
} catch (err) {
console.log('Error getting user record:', err)
}
},
async CreateUserRecord() {
let username = store.state.user.username;
try {
const result = await API.graphql(graphqlOperation(createUser, { input:{ id:username, username: username } })) // works but throws error
console.log(result);
} catch (err) {
console.log('Error creating user record:', err)
}
}
}
Все трикажется, работает, но они выдают ошибки, см. прикрепленный скриншот для деталей.
Всегда одна и та же ошибка: "Условие запроса пропущено ключевой элемент схемы: authorId (Сервис: AmazonDynamoDBv2; Код состояния: 400; Код ошибки: ValidationException;"
Ошибка должна быть связана с правилами аутентификации в модели. Но помните, что мой код работает, поэтому мой код не полная чушь.
Может кто-нибудь объяснить мне эту ошибку?Это ошибка в AWS? Или мой код написан неправильно?
---------------------------------- ОБНОВЛЕНИЕ НИЖЕ -------------------------------
Я до сих пор не понимаю, почему этоошибка возникает, но я добился некоторого прогресса в ее понимании.
Как показано на скриншотах, запрос getUser, генерируемый ampify, сработает, если я удалю часть, которая запрашивает сообщения пользователя.
AuthorId, который появляется в сообщении об ошибке, должен исходить из модели данных объектов Message.
Обратите внимание, что используется схема graphqlamed соединение, чтобы связать сообщения с пользователем, с ключевым полем «authorId».
Итак, я мог бы, вероятно, избавиться от ошибки, поигравшись со спецификацией соединения в модели данных.
Но подождите.Это запросы по умолчанию, сгенерированные при помощи ampify, просто предоставив ему схему, полученную ТОЧНО из проекта aws-sample.Разве эти запросы не могут работать достаточно хорошо без моего редактирования?