首先,可能会说这个问题与HTTP请求正文非常相似,即它没有通过AWS API Gateway到达AWS
Lambda函数,或者没有通过API网关在AWSLambda中获取json正文
但是,这些问题都没有解决使用Golang的问题,而我一直遇到的问题是找到event
与Node.js文档中各处使用的参数等效的参数。
这是我的Lambda函数:
package main
import (
"context"
"encoding/json"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"
"log"
)
type MyReturn struct {
Response string `json:"response"`
}
type APIGWResponse struct {
IsBase64Encoded bool `json:"isBase64Encoded"`
StatusCode int `json:"statusCode"`
Headers map[string]string `json:"headers"`
Body string `json:"body"`
}
func handle(ctx context.Context, name MyReturn) (APIGWResponse, error) {
log.Print("Called by ", name)
log.Print("context ", ctx)
headers := map[string]string{"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"}
code := 200
response, error := json.Marshal(myReturn{Response:"Hello, " + name.Body})
if error != nil {
log.Println(error)
response = []byte("Internal Server Error")
code = 500
}
return APIGWResponse{true, code, headers, string(response)}, nil
}
func main() {
lambda.Start(handle)
}
问题:MyReturn
从API GW调用时,对象未填充任何值。该行log.Print("Called by ", name)
导致没有任何内容附加到Called by
字符串。
向API GW的请求:
POST -> body: '{"name":"Bob"}', headers: {'Content-Type': 'application/json'}
这是在纯JS中执行的,如下所示:
const BASE_URL = "https://my_api_id.execute-api.us-east-1.amazonaws.com/prod/";
const TRIGGER_URL = "my_lambda_function";
function toGW() {
fetch(BASE_URL + TRIGGER_URL, {
method: 'POST',
body: '{"name":"Bimesh"}',
headers:{
'Content-Type': 'application/json'
}
})
.then(data => data.json())
.then(json => console.log(json))
.catch(error => console.log(error));
}
但是,从AWS Lambda控制台进行测试时,完全相同的主体可以工作。
身体:
{"name":"Bob"}
事实证明,即使我无法在面向用户的网站上找到与此相关的任何文档,也确实存在文档。阅读此内容:https :
//github.com/aws/aws-lambda-
go/blob/master/events/README_ApiGatewayEvent.md
到目前为止,这是我想出的从API GW接收数据并响应请求的最简单方法:
package main
import (
"context"
"encoding/json"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"
"log"
)
type myReturn struct {
Response string `json:"response"`
}
func handle(ctx context.Context, name events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
log.Print("Request body: ", name)
log.Print("context ", ctx)
headers := map[string]string{"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"}
code := 200
response, error := json.Marshal(myReturn{Response:"Hello, " + name.Body})
if error != nil {
log.Println(error)
response = []byte("Internal Server Error")
code = 500
}
return events.APIGatewayProxyResponse {code, headers, string(response), false}, nil
}
func main() {
lambda.Start(handle)
}
在这种情况下,该log.Print("Request body: ", name)
行会导致记录准确的请求正文。问题解决了。
注意:同样,我也不必APIGWResponse
从问题中创建该对象,这events.APIGatewayProxyResponse
是已经为您完成的完全相同的事情。这些对象都在此类中:https : //github.com/aws/aws-lambda-
go/blob/master/events/apigw.go
首先,可以说这个问题非常类似于HTTP请求主体没有通过AWS API网关获得AWS lambda函数,或者通过API网关获得AWS lambda中的json主体 但是,这些问题都没有解决Golang的使用问题,我一直遇到的问题是找到一个与node.js文档中到处使用的参数相当的参数。 下面是我的Lambda函数: 车身:
是否可以通过http请求(GET或POST)直接调用AWS Lambda函数?如果没有,是否有通过SNS或S3的解决方案?因为我想不出一个。。。 具体来说,我想使用 JSON 创建一个小的 API
如何获取json请求正文?
作者:陈希章 发表于 2018年1月5日 这是一个很小的技巧,而且用几句话就能讲明白。事情是这样的,我最近在回顾之前写过的文章:通过其他第三方工具体验Microsoft Graph 的时候,发现最近的PostMan这个工具无法正常地获取到accesstoken,具体原因不明,一阵找原因后,碰巧后来遇到了总部做Graph的产品组的同事,了解到他们正考虑在Graph Explorer中增加一个功能,可
我的应用程序是一个非WebSpring启动应用程序,使用WebClient进行内部get调用。 每次我启动它时,它都会返回我。 问题与webclient调用有关:当我执行block()时,一切正常。当我试图让它保持被动时,它抛出一个异常。 以下是我的主要方法: 这是我的网络客户电话: 以下是异常跟踪:
本文向大家介绍Java通过调用FFMPEG获取视频时长,包括了Java通过调用FFMPEG获取视频时长的使用技巧和注意事项,需要的朋友参考一下 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,li