最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何使用graphql“isValidJSValue”或“coerceValue”关于AWS拉姆达?

IT培训 admin 3浏览 0评论

如何使用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消息体,这样,我试图验证一个“字符串”,而不是一个对象。

如何使用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消息体,这样,我试图验证一个“字符串”,而不是一个对象。

发布评论

评论列表 (0)

  1. 暂无评论