我正在学习如何将AppSync与ReactNative一起使用。我创建了一个简单的React-Native应用程序,该应用程序可以扫描条形码,并将其转换为填写表格的数字。然后,GraphQL使用此条形码以及名称和描述在基础数据源(在本例中为DynamoDB)中创建条目。
我使用AWS-Amplify CLI创建了端点及其链接到的数据库。这是我的“项目”的基本架构(我将在末尾发布完整架构):
type Item {
id: ID!
barcode: String!
name: String!
description: String
}
如果仅使用控制台,则可以导航至“ AWS Appsync-> BarcodeAPI-local->查询”并使用查询:
query searchItems {
listItems(filter:{
barcode:{
eq: "8000070016644"
}
}) {
items{
id
barcode
name
description
}
}
}
这向我返回了一个包含单个项目的项目数组。
{
"data": {
"listItems": {
"items": [
{
"id": "a946b71c-5183-403d-a8b9-9e9ee341a6a7",
"barcode": "8000070016644",
"name": "item name",
"description": "item description"
}
]
}
}
}
但是,我遇到的问题是,如果我转到“ DynamoDB控制台->表-> Item-db name-local”,请单击“项目”,然后“扫描”通过条形码过滤的表以获取“ 8000070016644” DynamoDB中具有该条形码的多个条目。
然后,我使用了在条形码上过滤的DynamoDB扫描功能,并检索了未在AppSync控制台->查询部分中显示的ID,并对此进行了查询。它返回0个项目。但是我知道它在那里。
如果我返回搜索“ 8000070016644”。正如我所说,这将返回一个项目。如果我使用该ID并在DynamoDB中对该ID进行过滤,然后将条目编辑为新的唯一属性。然后,我可以返回Appsync->查询并对该ID进行搜索。现在,返回的单个项目具有新的编辑数据。
我还尝试了使用Mulesoft连接连接到Dynamo DB并以此方式读取DB。我可以在那里读取所有数据并进行访问。
所以,我相信我的问题是与AppSync和/或GraphQL有关,我犯了一个错误。您能提供任何建议吗?
其余的模式是:
input CreateItemInput {
id: ID
barcode: String!
name: String!
description: String
}
input DeleteItemInput {
id: ID
}
type Item {
id: ID!
barcode: String!
name: String!
description: String
}
input ModelBooleanFilterInput {
ne: Boolean
eq: Boolean
}
input ModelFloatFilterInput {
ne: Float
eq: Float
le: Float
lt: Float
ge: Float
gt: Float
contains: Float
notContains: Float
between: [Float]
}
input ModelIDFilterInput {
ne: ID
eq: ID
le: ID
lt: ID
ge: ID
gt: ID
contains: ID
notContains: ID
between: [ID]
beginsWith: ID
}
input ModelIntFilterInput {
ne: Int
eq: Int
le: Int
lt: Int
ge: Int
gt: Int
contains: Int
notContains: Int
between: [Int]
}
type ModelItemConnection {
items: [Item]
nextToken: String
}
input ModelItemFilterInput {
id: ModelIDFilterInput
barcode: ModelStringFilterInput
name: ModelStringFilterInput
description: ModelStringFilterInput
and: [ModelItemFilterInput]
or: [ModelItemFilterInput]
not: ModelItemFilterInput
}
enum ModelSortDirection {
ASC
DESC
}
input ModelStringFilterInput {
ne: String
eq: String
le: String
lt: String
ge: String
gt: String
contains: String
notContains: String
between: [String]
beginsWith: String
}
type Mutation {
createItem(input: CreateItemInput!): Item
updateItem(input: UpdateItemInput!): Item
deleteItem(input: DeleteItemInput!): Item
}
type Query {
getItem(id: ID!): Item
listItems(filter: ModelItemFilterInput, limit: Int, nextToken: String): ModelItemConnection
}
type Subscription {
onCreateItem: Item
@aws_subscribe(mutations: ["createItem"])
onUpdateItem: Item
@aws_subscribe(mutations: ["updateItem"])
onDeleteItem: Item
@aws_subscribe(mutations: ["deleteItem"])
}
input UpdateItemInput {
id: ID!
barcode: String
name: String
description: String
}