AWS Amplify хранилище данных не синхронизируется с сервером
Итак, я пытаюсь заставить библиотеку хранилища данных AWS Amplify работать с веб-приложением responseJS, которое я создаю. Я отлично отправлял данные в api и обратно, используя мутации graphql вручную, а затем я попытался настроить DataStore, следуя этому руководству. В клиенте с индексированной БД все работает нормально, но я не могу синхронизировать данные с api. В консоли появляется следующая ошибка:
DataStore - Data won't be synchronized. No GraphQL endpoint configured. Did you forget `Amplify.configure(awsconfig)`?
Я дважды проверил, и я определенно включаю свой экспорт AWS следующим образом:
import Amplify from "@aws-amplify/core";
import awsExports from "./aws-exports";
Amplify.configure(awsExports);
И содержание сгенерированного ./aws-exports.js
следующее:
/* eslint-disable */
// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.
const awsmobile = {
"aws_project_region": "us-east-2",
"aws_appsync_graphqlEndpoint": "https://xxxxxxxxxxxxxx.appsync-api.us-east-2.amazonaws.com/graphql",
"aws_appsync_region": "us-east-2",
"aws_appsync_authenticationType": "API_KEY",
"aws_appsync_apiKey": "xxxxxxxxxxxxxx",
"aws_cognito_identity_pool_id": "us-east-2:xxxxxxxxxxxxx",
"aws_cognito_region": "us-east-2",
"aws_user_pools_id": "us-east-2_xxxxxxxxx",
"aws_user_pools_web_client_id": "xxxxxxxxxxxxxxxxxx",
"oauth": {}
};
export default awsmobile;
Я дважды проверил учетные данные для aws_appsync_graphqlEndpoint
а также aws_appsync_apiKey
и они соответствуют значениям, возвращаемым из amplify status
в кли. Я также бегалamplify push
и мой Api имеет статус No Change
. При настройке api я также включил разрешение конфликтов, как указано в руководстве.
Интересно, что при настройке усилителя я также пробовал следующее:
import Amplify from "@aws-amplify/core";
import {DataStore} from "@aws-amplify/datastore";
import awsExports from "./aws-exports";
Amplify.configure(awsExports);
DataStore.configure(awsExports);
Это решило DataStore - Data won't be synchronised
error, но вместо этого я получил следующие ошибки, а данные по-прежнему не отправляются в api.
DataStore - subscriptionError Subscribe only available for AWS AppSync endpoint
DataStore - Sync error Subscribe only available for AWS AppSync endpoint
Означает ли это, что мой API как-то неправильно настроен? Как мне это исправить?
6 ответов
Я некоторое время возился с синхронизацией хранилища данных в проекте Angular. Вот что, как мне кажется, я узнал из своих наблюдений или ответов, опубликованных другими.
- Невозможно использовать аутентификацию ключа API, это не работает. я использую
Cognito
пул пользователей, и это работает - Пришлось включить
Optimistic Concurrency
в качестве стратегии разрешения конфликтов, но я думаю, что она работает даже со стандартнымAuto Merge
, не уверен, когда именно нужно - Всем типам нужен автоматически сгенерированный идентификатор типа «ID!». Без этого вы получите ошибки, когда настроены слушатели, и синхронизация не будет работать даже для типов, у которых она есть.
- Убедитесь, что код регенерируется и отправляется, а хранилище данных остается включенным после каждого изменения схемы (иногда этот параметр может сбрасываться)
Для устранения неполадок включите трассировку (
Amplify.Logger.LOG_LEVEL = 'DEBUG'
) и отфильтруйте в консоли браузера сообщения, содержащие "err". Если такие сообщения существуют, вся синхронизация не работает. Вот как вы можете определить, есть ли у вас одна из перечисленных выше проблем.
Еще одна хитрость - удалить локальный
amplify-datastore
IndexDB
в приложении / хранилище Chrome Dev Tools. Если синхронизация работает, она будет повторно заполнена из данных таблицы DynamoDB в облаке при следующей перезагрузке приложения.
У меня такая же ошибка при импорте
DataStore
из
aws-amplify
вместо
@aws-amplify/datastore
. Мне потребовалось время, чтобы понять это, но все, что мне нужно было сделать, это изменить оператор импорта.
Итак, попробуйте изменить оператор импорта с:
import { DataStore } from "aws-amplify";
кому:
import { DataStore } from "@aws-amplify/datastore";
Где-то между @aws-ampify / datastore версии 2.9.6 - 2.9.9 они изменили конфигурацию Amplify. Теперь вам нужно поставить
aws-exports
в
{config: }
Однако я не могу получить 2.9.9 для загрузки данных, поэтому я остаюсь на 2.9.8
2.9.8 и ранее:
import awsConfig from "./aws-exports";
import { Amplify} from "@aws-amplify/core";
Amplify.configure(awsConfig);
2.9.9:
import awsConfig from "./aws-exports";
import { Amplify} from "@aws-amplify/core";
Amplify.configure({ config: { awsConfig } });
Это должно быть проблема, связанная с недавним обновлением. Около недели назад я успешно использовал DataStore (v2.2.8) в приложении expo. Вчера я начал новый проект приложения expo и не могу придумать способ запустить и запустить DataStore с синхронизацией. Вы пробовали старую версию @aws-ampify/datastore?
В корне вашего приложения сделайте следующее:
import { Amplify } from "aws-amplify";
import config from "../src/aws-exports.js";
Amplify.configure({
...config,
});
Это должно исправить это для вас.
В дополнение к тому, что сказали другие люди. Попробуйте удалить
node modules
&
package-lock.json
. Тогда беги
npm cache clean --force
а потом
npm i
. Это сработало для меня с обычным
Amplify.configure(config)