故障診斷和 中的常見錯誤 AWS AppSync - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

故障診斷和 中的常見錯誤 AWS AppSync

本區段說明一些常見的錯誤,以及如何排除這些問題。

不正確的 DynamoDB 索引鍵映射

如果您的 GraphQL 操作傳回下列錯誤訊息,可能是因為您的請求映射範本結構與 Amazon DynamoDB 金鑰結構不相符:

The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code

例如,如果您的 DynamoDB 資料表有一個名為 的雜湊金鑰,"id"而您的範本顯示 "PostID",如下列範例所示,這會導致上述錯誤,因為 與 "id"不相符"PostID"

{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "PostID" : $util.dynamodb.toDynamoDBJson($ctx.args.id) } }

缺少解析程式

如果您執行查詢等 GraphQL 操作,但是獲得 null 回應,這可能是因為您並未設定解析程式。

如果匯入的結構描述定義了 getCustomer(userId: ID!): 欄位,但並未針對此欄位設定解析程式,則當您執行像是 getCustomer(userId:"ID123"){...} 的查詢時,將會獲得類似於下列的回應:

{ "data": { "getCustomer": null } }

映射範本錯誤

如果未正確設定映射範本,您將會收到 GraphQL 回應,其中的 errorTypeMappingTemplatemessage 欄位應該會指出映射範本的問題所在。

例如,如果請求映射範本未包含 operation 欄位,或是 operation 欄位的名稱不正確,則您將會收到類似下列的回應:

{ "data": { "searchPosts": null }, "errors": [ { "path": [ "searchPosts" ], "errorType": "MappingTemplate", "locations": [ { "line": 2, "column": 3 } ], "message": "Value for field '$[operation]' not found." } ] }

不正確的傳回類型

資料來源所傳來的傳回類型,必須符合結構描述中所定義的物件類型,否則將會出現 GraphQL 錯誤,例如:

"errors": [ { "path": [ "posts" ], "locations": null, "message": "Can't resolve value (/posts) : type mismatch error, expected type LIST, got OBJECT" } ]

例如,下列的查詢定義可能會產生這種錯誤:

type Query { posts: [Post] }

這預期LIST會有許多[Posts]物件。例如,如果有使用 Node.JS 的 Lambda 函式,包含類似於下列的程式碼:

const result = { data: data.Items.map(item => { return item ; }) }; callback(err, result);

這將會丟出錯誤,因為 result 是一個物件。您需要將回呼變更為 result.data,或變更結構描述,才能不傳回 LIST。

處理無效的請求

當 AWS AppSync 無法處理並傳送請求 (由於不正確的資料,例如無效的語法) 至欄位解析器時,回應承載會將值設定為 的欄位資料null和任何相關錯誤傳回。