Error Documentation - netfoor/AmplifyWorkshop-RetailStore GitHub Wiki
Error al Cargar Datos de Prueba con Amplify Gen 2: "Error loading products: undefined"
Síntoma
Al intentar cargar datos de prueba (por ejemplo, desde un archivo JSON) a un modelo de datos en AWS Amplify Gen 2 utilizando client.models.MyModel.create(), se recibe un error similar a:
Product data load status
Error loading products: undefined
There are N products for the RetailStore application
Aunque el número de productos (N) pueda parecer correcto o esperable, el mensaje Error loading products: undefined en lugar de un tipo de error específico como DynamoDB:ConditionalCheckFailedException es la clave del problema.
Causa Raíz
Este error undefined generalmente ocurre cuando los datos que intentas insertar contienen campos (propiedades) que no están definidos en el esquema GraphQL de tu modelo de datos en Amplify.
AWS AppSync (el servicio GraphQL subyacente que utiliza Amplify) valida estrictamente los datos de entrada contra el esquema. Si recibe propiedades que no reconoce en el input de una mutación create, rechaza la operación. La librería cliente de Amplify (o el método de manejo de errores específico en tu código) puede no capturar el errorType exacto para este tipo de validación, resultando en un undefined.
Ejemplo de Discrepancia Común:
- En tu JSON de datos de prueba (
products.json):{ "id": "...", "name": "...", "gender_affinity": "F", // ¡Este campo existe en el JSON! "where_visible": "UI" // ¡Este campo existe en el JSON! // ... otros campos } - En tu esquema GraphQL (
amplify/data/resource.ts):Product: a .model({ id: a.id().required(), name: a.string().required(), // ... otros campos como description, price, etc. // PERO FALTAN 'gender_affinity' y 'where_visible' })
Solución
Para resolver este problema, tienes dos enfoques principales, dependiendo de si necesitas o no los campos adicionales en tu aplicación:
-
Eliminar los campos extra del JSON de datos de prueba:
- Si los campos en el JSON que no están en el esquema no son necesarios para tu aplicación, simplemente remuévelos de tu archivo JSON de datos de prueba (
products.jsonen este caso). - Este es el enfoque más rápido si los datos no son críticos.
- Si los campos en el JSON que no están en el esquema no son necesarios para tu aplicación, simplemente remuévelos de tu archivo JSON de datos de prueba (
-
Añadir los campos faltantes a tu esquema GraphQL:
- Si los campos extra en el JSON (
gender_affinity,where_visible, etc.) sí son datos que tu aplicación necesita y utilizará, entonces debes actualizar tu modelo de datos enamplify/data/resource.tspara incluir esas propiedades. - Ejemplo:
Product: a .model({ id: a.id().required(), name: a.string().required(), description: a.string(), price: a.float(), current_stock: a.integer(), image: a.string(), rating: a.float(), style: a.string(), gender_affinity: a.string(), // ¡Añadido! where_visible: a.string(), // ¡Añadido! // relationships categoryProductsId: a.id(), category: a.belongsTo('Category', 'categoryProductsId'), }) - Después de modificar el esquema, asegúrate de desplegar tus cambios de backend ejecutando
npx ampx sandbox(para desarrollo local) onpx ampx deploy(para entornos de despliegue). Esto actualizará tu API GraphQL y la tabla de DynamoDB para que reconozcan los nuevos campos.
- Si los campos extra en el JSON (
Recomendación
La mejor práctica es que tus datos de prueba (.json) coincidan exactamente con el esquema GraphQL de tus modelos. Si necesitas los datos, actualiza el esquema. Si no los necesitas, límpialos del JSON.
Después de aplicar la solución, vuelve a ejecutar tu script de carga de datos. Si el problema era la discrepancia de esquema, la carga debería proceder sin el error undefined.