猿问

使用无服务器调用函数时传递 JSON

我正在使用无服务器运行一个用 Go 编写的 lambda 函数,我想在调用它时向它传递几个参数。


这是我为接收请求而创建的结构:


type RequestStruct struct {

    StartAt int `json:"startAt"`

    EndAt   int `json:"endAt"`

}

在处理程序中,我试图打印出这些值:


func Handler(ctx context.Context,request RequestStruct) (Response, error) {

    fmt.Printf("Request: %v",request)

我尝试使用该--raw选项调用它,所以我尝试这样做


serverless invoke -f orders --raw -d '{"startAt":1533513600,"endAt":1534118399}'


我试着用双引号把它包起来


serverless invoke -f orders --raw -d "{startAt:1533513600,endAt:1534118399}"


serverless invoke -f orders --raw -d "{\"startAt\":1533513600,\"endAt\":1534118399}"


我收到了所有三个的编组错误:


{

    "errorMessage": "json: cannot unmarshal string into Go value of type main.RequestStruct",

    "errorType": "UnmarshalTypeError"

}

我不确定我做错了什么,我可以在网上找到任何例子,只有这个无服务器文档关于如何进行调用和这个aws 文档关于如何处理 Go 中的事件


更新 我尝试从 AWS 控制台调用事件并且它起作用了,所以问题很可能出在无服务器调用命令中。


斯蒂芬大帝
浏览 109回答 2
2回答

Helenr

我通过将我的 JSON 放在文件中而不是命令本身找到了解决此问题的方法,这并不能解决我在问题中遇到的问题,但它是一种使用 Json 调用函数的方法我添加了一个events/startAndEnd.json包含我的 json 数据的文件:{    "startAt":1533513600,    "endAt":1534118399}并在调用命令中引用该文件:serverless invoke -f orders --path events/startAndEnd.json

慕尼黑8549860

如果您在通过 运行命令时遇到此问题npm。我在调用它时也遇到了类似的错误:    "invoke": "serverless invoke --function myfunction --data \"{ \"Records\": []}\"",通过将双引号更改为单引号data然后突然开始工作:    "invoke": "serverless invoke --function myfunction --data '{ \"Records\": []}'",
随时随地看视频慕课网APP

相关分类

Go
我要回答