В рабочем процессе моего приложения AppSync будет доставлять пользовательские входные данные (в виде сообщений) в очередь SQS, которая будет запускать лямбду для асинхронной обработки.
Lambda будет проверять сообщения на соответствие GraphQLInputType.Для этого я использую функцию coerceValue
в graphql-js.Получил совет от этого вопроса Как я могу использовать isValidJSValue для проверки переменной запроса в моем клиентском коде? , именно то, что мне нужно.
Проблема в том, что код проверки запускается без ошибок при выполнении локальных тестов внутри nodejs, но при развертывании в AWS тот же код завершается с сообщением:
["Expected type CreateBookInput to be an object."]
.
Очевидно, что строка schema.getType(inputType)
возвращает только «строку» при работе на aws.
Уже пробовали обе функции 'coerceValue' и 'isValidJSValue', но безуспешно.Также пытался Promisify моей функции и использовать стиль async / await, но ничего не изменилось, та же ошибка.
function validate(object, inputType) {
let schema = loadSchema()
let validationResult = coerceValue(object, schema.getType(inputType))
if (validationResult.errors) {
throw new Error(`GraphQL: ${validationResult.errors}`)
}
return true
}
function loadSchema() {
let schemaFile = fs.readFileSync(path.join(__dirname, 'schema.graphql'), 'utf8'),
awsTypesSchema = fs.readFileSync(path.join(__dirname, 'aws.graphql'), 'utf8')
return buildSchema(schemaFile += awsTypesSchema)
}
При локальном запуске я вижу, что schema.getType(inputType)
возвращает GraphQLInputObjectType
, но поведениеотличается от AWS Lambda, там в логах он только возвращает имя типа ввода, например "CreateBookInput"
.
У кого-нибудь была подобная проблема?Любая помощь приветствуется.