Невозможно сериализовать AWSDate из RDS в шаблоне сопоставления ответов AppSync

Я создаю проект AppSync, используя бессерверную Aurora в качестве базы данных, и наткнулся на эту странную ошибку:

"Can't serialize value (/getUsers/created_at) : Unable to serialize `2019-09-28 07:36:13` as a valid DateTime Object."

Это происходит, когда я получаю объект User, который выглядит так:

type Users {
  id: String!
  name: String!
  description: String
  created_at: AWSDateTime
  updated_at: AWSDateTime
  logged_in: AWSDateTime
}

Кажется, ошибка возникает из-за того, что $utils.rds.toJsonObject($ctx.result)[0][0]не может проанализировать AWSDateTime. Что делает невозможным обслуживание чего-либо с датой из базы данных.

Если я просто выберу объект без дат ["SELECT id,name,description FROM Users WHERE id='$ctx.args.id'"] работает нормально.

Так как же обрабатывать даты в AWS AppSync и Aurora? Мне не удалось найти в документации ни одного примера или ссылки на обработку дат.:(

4 ответа

Решение

Я случайно нашел ответ в репо, связанном с этим вопросом. Используйте AppSync и Amazon RDS с serverless-graphql.

Оказывается, как обнаружил пользователь dev1702,$utils.rds.toJsonObject($ctx.result)[0][0] не может выполнить синтаксический анализ метки времени RDS в формат GraphQl AWSDate.

Так что просто измените тип схемы graphql с:

created_at: AWSDateTime

кому:

created_at: String

решает эту проблему.

Вы можете SELECT to_char(created_at, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') FROM Users который будет работать на AWSDateTime.

Еще один SELECT created_at::date FROM Users который будет работать на AWSDate.

Если вы хотите вывести SQL в формате, которыйAWSDateTimeподдерживает и хочет поддерживать миллисекунды, которые вы можете сделать:

      SELECT to_char(created_at, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') FROM Users

вам нужно ввести дату и время как => 2022-08-01T10:10:42-05:00

Другие вопросы по тегам