AppSync проверяет, существует ли запись DynamoDB - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь написать распознаватель для AppSync, который выводит значение для логического поля на основе существования записи в DynamoDB.

В настоящее время у меня есть следующий шаблон сопоставления запросов:

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

И следующий шаблон сопоставления ответов:

#if($util.isNull($ctx.result))
    #set($exists = false)
#else
    #set($exists = true)
#end

$util.toJson({
    "field1": $ctx.args.field1,
    "field2": $ctx.args.field2,
    "exists": $exists
})

Это работает правильно, если запись существует, но если ее нет, AppSync просто возвращает «ноль» для всего вызова API и, похоже, не оцениваетшаблон отображения ответов вообще.Можно ли как-нибудь проинструктировать его не делать этого?

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

1 Ответ

0 голосов
/ 04 декабря 2018

Это ожидаемое поведение для 2017 версии шаблона запроса.Если вы хотите, чтобы оценка $ctx.result была выполнена, переключитесь на версию 2018, как показано ниже:

{
  "version": "2018-05-29",
  "operation": "GetItem",
  "key": {
    "id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
  },
}

Дополнительные сведения см. В этом журнале изменений .

...