Ошибка проверки AppSync не вызывает обработчик ошибок в шаблоне отображения ответов - PullRequest
0 голосов
/ 21 октября 2019

Я работаю с AppSync, и кажется, что ошибки проверки не вызывают перехват ошибок в шаблоне отображения ответов. Значения атрибута содержат входные данные AWSPhone. Если я ввожу неверный формат для AWSPhone, ошибка (как и ожидалось):

{
  "data": null,
  "errors": [
    {
      "path": null,
      "locations": [
        {
          "line": 2,
          "column": 17,
          "sourceName": null
        }
      ],
      "message": "Validation error of type WrongType: argument 'input.company.phoneNumber' with value 'StringValue{value='+1-541-754-300'}' is not a valid 'AWSPhone' @ 'createProfile'"
    }
  ]
}

Мой шаблон сопоставления запросов выглядит так:

{
  "version": "2018-05-29",
  "operation": "PutItem",
  "key": {
    "id": $util.dynamodb.toDynamoDBJson($ctx.args.input.client),
  },
  "attributeValues": $util.dynamodb.toMapValuesJson($ctx.args.input),
}

Мой шаблон сопоставления ответов:

#if($ctx.error)
  $util.error("Custom error response")
#end
  $util.toJson($ctx.result)

Ясно, что ошибка действительно происходит, но она не вызывает случай в моем шаблоне ответа. Как мне вернуть пользовательское сообщение для ошибки проверки? Возможно ли вообще в этом сценарии?

1 Ответ

0 голосов
/ 21 октября 2019

Исходя из того, что вы указали, похоже, что ваша PutItem операция прошла успешно и вернула элемент, который вы поместили в поле $ctx.result. Затем, когда AppSync попытался привести одно из полей на выходе шаблона сопоставления ответов в AWSPhone, произошел сбой с упомянутой вами ошибкой проверки.

#if($ctx.error) $util.error("Custom error response") будет перехватывать только ошибки DynamoDB. Приведение GraphQL из вашего результата к типу выходного поля происходит после , который оценил шаблон.

Один из способов уловить это - добавить проверку в шаблон сопоставления запроса перед его сохранением в DynamoDB или изменить значение, возвращаемое из DynamoDB, в соответствующий скалярный формат AWSPhone.

...