Go 分析负载与“无服务器调用本地”不同,而与网关一起部署时则不同

Go 分析负载与“无服务器调用本地”不同,而与网关一起部署时则不同,go,aws-lambda,serverless,Go,Aws Lambda,Serverless,与部署到AWS时的行为相比,无服务器使用invoke local处理请求有效负载的方式似乎有所不同 预期的行为是将有效负载从请求主体中拉出,如下所示 func Handler(ctx context.Context, request events.APIGatewayProxyRequest) type SearchQuery struct { Caller string `json:"caller"` Value string `json:"value"` } func

与部署到AWS时的行为相比,无服务器使用
invoke local
处理请求有效负载的方式似乎有所不同

预期的行为是将有效负载从请求主体中拉出,如下所示

func Handler(ctx context.Context, request events.APIGatewayProxyRequest)
type SearchQuery struct {
    Caller string `json:"caller"`
    Value  string `json:"value"`
}
func Handler(ctx context.Context, request SearchQuery) (Response, error)
然后将其解组到您的数据类型中,如下所示

func Handler(ctx context.Context, request events.APIGatewayProxyRequest)
type SearchQuery struct {
    Caller string `json:"caller"`
    Value  string `json:"value"`
}
func Handler(ctx context.Context, request SearchQuery) (Response, error)
但是,当使用
--data
标记本地调用函数时,有效负载不在
请求.Body

events.APIGatewayProxyRequest) {
 Resource: (string) "",
 Path: (string) "",
 HTTPMethod: (string) "",
 Headers: (map[string]string) <nil>,
 MultiValueHeaders: (map[string][]string) <nil>,
 QueryStringParameters: (map[string]string) <nil>,
 MultiValueQueryStringParameters: (map[string][]string) <nil>,
 PathParameters: (map[string]string) <nil>,
 StageVariables: (map[string]string) <nil>,
 RequestContext: (events.APIGatewayProxyRequestContext) {
  AccountID: (string) "",
  ResourceID: (string) "",
  Stage: (string) "",
  RequestID: (string) "",
  Identity: (events.APIGatewayRequestIdentity) {
   CognitoIdentityPoolID: (string) "",
   AccountID: (string) "",
   CognitoIdentityID: (string) "",
   Caller: (string) "",
   APIKey: (string) "",
   AccessKey: (string) "",
   SourceIP: (string) "",
   CognitoAuthenticationType: (string) "",
   CognitoAuthenticationProvider: (string) "",
   UserArn: (string) "",
   UserAgent: (string) "",
   User: (string) ""
  },
  ResourcePath: (string) "",
  Authorizer: (map[string]interface {}) <nil>,
  HTTPMethod: (string) "",
  APIID: (string) ""
 },
 Body: (string) "",
 IsBase64Encoded: (bool) false
}

有没有办法让这两个环境工作相同?

我是通过使用
--path
arg而不是
--data
arg并像这样写出有效负载来实现的


serverless invoke local-f myfunc--log--path mydata.json

{
    "body": "{\"caller\": \"foo\", \"value\": \"clark.kent@example.com\"}"
}

您可以发布与参数值
--data
一起使用的完整
serverless invoke local
命令吗?
serverless invoke local-f myfunc--data'{“caller”:“foo”,“query”:bar@gmail.com“}”
文档在--data arg和behavior上不清楚。我假设它不默认为requestresponse类型?