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
相关产品推荐
相关产品推荐

