如何使用graphql“isValidJSValue”或“coerceValue”关于AWS拉姆达?
在我的应用的工作流程的AppSync将递送的用户输入(如消息)的SQS队列,将触发用于异步处理的λ。
LAMBDA将验证对GraphQLInputType消息。为此,我使用graphql-JS的功能coerceValue
。得到了这个问题How can I use isValidJSValue to validate a query variable in my client code?尖,正是我需要的。
问题是验证代码运行完美的NodeJS内运行的本地测试时,但当部署到AWS非常相同的代码失败的消息:
["Expected type CreateBookInput to be an object."]
。
显然,在AWS上运行时,线schema.getType(inputType)
将返回只有“字符串”。
已经尝试与这两个功能“coerceValue”和“isValidJSValue”,但没有成功。还试图Promisify我的功能和使用异步/等待风格,但并没有任何区别,同样的错误。
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"
。
有没有人有类似的问题?任何帮助是值得欢迎的。
回答如下:其实,没有什么做GraphQL库或lambda可言,这个问题是因为缺少JSON.parse上SQS消息体,这样,我试图验证一个“字符串”,而不是一个对象。