You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Amplify Datastore生产环境查询失效问题求助

Expo应用真机上Amplify Datastore查询失败问题

问题现象

开发模式下Expo应用运行正常,但安装到真实设备后,所有基于Amplify Datastore的查询都无法执行。已尝试添加Datastore.configure配置、安装Datastore不稳定版本npm install @aws-amplify/datastore@unstable,均无效。

用户示例代码:

import { useWindowDimensions, TouchableOpacity } from "react-native";
import React, { useEffect, useState } from "react";
import MapView, { PROVIDER_GOOGLE } from "react-native-maps";
import { Amplify } from "aws-amplify";
import awsconfig from "../aws-exports";
import { DataStore } from "@aws-amplify/datastore";
import { House } from "../models";
import { GestureHandlerRootView } from "react-native-gesture-handler";
import HouseMark from "../components/HouseMark";
import { mapStyle } from "../utils";

Amplify.configure(awsconfig);
DataStore.configure(awsconfig);

const SellScreen = () => {
  const [houses, setHouses] = useState();

  const { width, height } = useWindowDimensions();

  useEffect(() => {
    try {
      DataStore.query(House, (h) => h.available.eq(true)).then(setHouses);
    } catch (error) {
      console.log(error);
    }
  }, []);


  return (
    <GestureHandlerRootView className=" flex-1">
      <MapView
        provider={PROVIDER_GOOGLE}
        style={{
          width,
          height,
        }}
        customMapStyle={mapStyle}
        initialRegion={{
          latitude: 12.3637,
          longitude: -1.526,
          latitudeDelta: 0.7,
          longitudeDelta: 0.7,
        }}
      >
    
        {houses &&
          houses.map((house, id) => (
            <TouchableOpacity key={id}>
              <HouseMark house={house} />
            </TouchableOpacity>
          ))}
      </MapView>
    </GestureHandlerRootView>
  );
};

export default SellScreen;

排查与解决方案

1. 移除重复的Datastore配置

Amplify.configure会自动初始化Datastore,重复调用DataStore.configure(awsconfig)会导致配置冲突,直接删除该行代码。

2. 修复异步错误捕获

当前try/catch无法捕获Promise异步错误,需改用.catch处理:

useEffect(() => {
  DataStore.query(House, h => h.available.eq(true))
    .then(setHouses)
    .catch(error => {
      console.error("Datastore查询失败:", error);
    });
}, []);

3. 检查真机网络权限

确保真机联网,且应用拥有网络访问权限。确认app.json中配置:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSAppTransportSecurity": {
          "NSAllowsArbitraryLoads": true
        }
      }
    },
    "android": {
      "permissions": ["INTERNET"]
    }
  }
}

4. 统一Amplify版本

确保aws-amplify与@aws-amplify/datastore版本一致,避免版本不兼容:

npm install aws-amplify@latest @aws-amplify/datastore@latest

5. 监听Datastore同步状态

通过Hub监听同步事件,排查同步错误:

import { Hub } from 'aws-amplify';

useEffect(() => {
  const unsubscribe = Hub.listen('datastore', (data) => {
    const { payload } = data;
    if (payload.event === 'ready') {
      DataStore.query(House, h => h.available.eq(true))
        .then(setHouses)
        .catch(console.error);
    } else if (payload.event === 'error') {
      console.error("Datastore同步错误:", payload.data);
    }
  });

  return unsubscribe;
}, []);

6. 重新生成模型文件

若模型文件版本过旧,重新执行代码生成命令:

amplify codegen models

内容的提问来源于stack exchange,提问作者Laspeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:00:56