Невозможно проанализировать документ JSON: нераспознанный токен «$ util»: ожидалось («истина», «ложь» или «ноль») - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь использовать запрос с фильтром:

query queryPitchesByApprovedIndex($approved: Boolean = true) {
  queryPitchesByApprovedIndex(approved: $approved) {
    items {
      id
    }
  }
}

Шаблон отображения, созданный AppSync, выглядит следующим образом:

{
  "version": "2017-02-28",
  "operation": "Query",
  "query": {
    "expression": "#approved = :approved",
    "expressionNames": {
      "#approved": "approved",
    },
    "expressionValues": {
      ":approved": {"B": $util.dynamodb.toBinary($ctx.args.approved)},
    },
  },
  "index": "approved-index",
  "limit": $util.defaultIfNull($ctx.args.first, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
  "scanIndexForward": true,
  "select": "ALL_ATTRIBUTES",
}

Полученная ошибка:

Невозможно проанализировать документ JSON: «Нераспознанный токен« $ util »: ожидал (« истина »,« ложь »или« ноль ») \ n в [Source: (String) \"{\ n \ "version \": \ "2017-02-28 \", \ n \ "operation \": \ "Query \", \ n \ "query \": {\ n \ "expression \":\ "# одобренный =: утвержденный \", \ n \ "expressionNames \": {\ n \ "# утвержденный \": \ "утвержденный \", \ n}, \ n \ "expressionValues ​​\": {\ n \": Approved \": {\ "B \": $ util.dynamodb.toBinary ($ ctx.args.approved)}, \ n}, \ n}, \ n \ "index \": \ "Approved-index\ ", \ n \" limit \ ": 20, \ n \" nextToken \ ": null, \ n \" scanIndexForward \ ": true, \ n \" select \ ": \" ALL_ATTRIBUTES \ ", \ n}\ ";строка: 10, столбец: 31] '

Есть идеи, как мне это исправить?

1 Ответ

1 голос
/ 10 мая 2019

$util.dynamodb.toBinary(String data) принимает String в качестве входных данных, но вы передаете Boolean, и поэтому он не проходит оценку.

Это хорошая обратная связь, я проверю с командой, если это возможночтобы сделать утилиту более снисходительной, а также принять логическое значение $util.dynamodb.toBinary(Boolean data)

А пока возможный обходной путь:

#if($ctx.args.approved) 
 #set($approved = $util.dynamodb.toBinaryJson("true"))
#else
 #set($approved = $util.dynamodb.toBinaryJson("false"))
#end

{
  "version": "2017-02-28",
  "operation": "Query",
  "query": {
    "expression": "#approved = :approved",
    "expressionNames": {
      "#approved": "approved",
    },
    "expressionValues": {
      ":approved":  $approved
    },
  },
  "index": "approved-index",
  "limit": $util.defaultIfNull($ctx.args.first, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
  "scanIndexForward": true,
  "select": "ALL_ATTRIBUTES",
}
...