Как использовать graphql 'isValidJSValue' или 'coerceValue' в AWS lambda? - PullRequest
0 голосов
/ 02 февраля 2019

В рабочем процессе моего приложения 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".

У кого-нибудь была подобная проблема?Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 февраля 2019

На самом деле, не было никакого отношения к библиотекам GraphQL или лямбде, проблема была в том, что в теле сообщения SQS отсутствовал JSON.parse, поэтому я пытался проверить «строку», а не объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...