Go语言 Lambda AppSync GraphQL -从变异请求获取字符串-未找到

uinbv5nw  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(86)

我使用AWS Amplify、AppSync(GraphQL)和Go Lambda函数。

type Mutation {
  goadd(name: String): String @function(name: "goadd-${env}")
}

确定程序请求模板为:

然后我的lambda是

package main

import (
    "context"
    "fmt"

    "github.com/aws/aws-lambda-go/lambda"
)

type MyEvent struct {
    Name  string `json:"name"`
}

func HandleRequest(ctx context.Context, name MyEvent) (string, error) {
    fmt.Printf("Hello %v\n", name.Name)
    fmt.Println(name)
    fmt.Println(ctx)
    return fmt.Sprintf("Hello %s!", name.Name), nil
}

func main() {
    lambda.Start(HandleRequest)
}

当我在AppSync中执行变化时,得到的响应是Hello !
我也检查了CloudWatch日志,它们没有显示任何数据被传入。
我用Node.js做了同样的事情,它没有问题,所以我不知道我在Go语言中做错了什么。有人有什么想法吗?
我还阅读了"github.com/aws/aws-lambda-go/lambda"的文档,对于如何获取传入的值,感觉相当模糊。

t9eec4r0

t9eec4r01#

我在查看other StackOverflow的答案时找到了答案。这不是重复的,因为引用的SO帖子是针对一个单独的问题的,它附带地显示了从请求中获取参数的正确方法。解决方案是传入的值是字符串(在我的例子中)参数的Map。因此,不要使用

Name string `json:"name"`

它应该

type Arguments struct {
    Arguments map[string]string `json:"arguments"`
}

然后你就可以访问

name := arguments.Arguments["name"]

我更希望有一个包含“Name”的结构体,以及我作为参数传递的任何其他内容,但这是快速的第一步,我希望将其作为更新发布,以了解如何至少获取数据并解决我的问题

相关问题