AppSync Resolver работает только тогда, когда я жестко закодировал ввод.context.arguments не работает - PullRequest
0 голосов
/ 05 марта 2019

Правка для ясности: сообщений об ошибках нет, просто возвращается пустой список, если входная строка взята из context.arguments, предполагая, что она просто не выводит входную переменную в тестере запросов (настраивает еенекорректно вызывает эту известную ошибку при печати, конечно).Я также сделал это в конвейер с точно таким же результатом.Оглядываясь вокруг, люди предлагают сделать промежуточный объект, но, конечно, я просто неправильно вывожу свои входные переменные.

Я работаю над проектом в AWS Appsync с использованием DynamoDB и столкнулся с проблемойс вводом context.arguments.

В основном код работает, если я жестко закодирую строку с идентификатором книги в запросе (полный контекст, чтобы следовать), но если я использую context.arguments, он просто отказываетсяработать правильно, возвращая пустой массив для «позвоночника».

В моей схеме есть следующие типы:

type Book { id: ID! title: String spines: [Spine] }

type Spine { id: ID! name: String bookId: ID! }

Я использую следующий запрос:

type Query { getBook(id: ID!): Book

query getBook($bookId: ID!){ getBook(id: $bookId){ title id spines { name bookId } } }

Со следующим вводом (предположим, что это соответствующий гид):

{ "bookId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" }

И этот преобразователь для объекта spines:

{ "version" : "2017-02-28", "operation" : "Query", "index" : "bookId-index", "query" : { "expression": "#bookId = :bookId", "expressionNames" : { "#bookId" : "bookId" }, "expressionValues" : { ":bookId" : { "S" : "${context.arguments.id}" } } } } }

Я убедился, что мой набор данных также содержит ложные срабатывания (спины для других книг), поэтомучто я знаю, когда мой запрос возвращает правильные данные.

Это работает, еслиЯ жестко кодирую guid как строку вместо использования context.arguments и получаю именно то, что ищу для каждой guid книги.

Например, замена значений выражений на это прекрасно работает:

"expressionValues" : { ":bookId" : { "S" : "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" } }

Почему "$ {context.arguments.id}" не получает здесь входную переменную так же, как в других запросах?

1 Ответ

0 голосов
/ 12 марта 2019

Спасибо @IonutTrestian за то, что он указал мне правильное направление.

$ctx.args было пусто, но я решил пойти вверх по цепочке, чтобы увидеть, что было во всем контексте, поэтому $util.error($util.toJson($ctx)).

Объект json, который я обнаружил, включал небольшой объект с именем «Source», который содержал возвращаемый запрос для объекта Book.

Короче говоря, $ctx.source.id при применении к моему запросу сработало очарование.

Я также знаю немного больше об отладчиках распознавателей DynamoDB на случай возникновения подобных проблем в будущем.Большое вам спасибо!

...