Невозможно сериализовать 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