首页 > 后端开发 > Golang > 如何从 Go Lambda 函数返回 HTML?

如何从 Go Lambda 函数返回 HTML?

WBOY
发布: 2024-02-08 21:40:28
转载
809 人浏览过

如何从 Go Lambda 函数返回 HTML?

php小编新一在介绍如何从 Go Lambda 函数返回 HTML时,将为大家详细解答这个问题。Go Lambda 函数是一种在云计算中运行的函数,返回 HTML 页面对于许多 Web 开发人员来说是一个常见的需求。在本文中,我们将探讨如何使用 Go 编写 Lambda 函数,并将其返回为 HTML 页面,以供前端使用。通过本文的指导,您将能够轻松实现从 Go Lambda 函数返回 HTML 的功能。现在就让我们开始吧!

问题内容

我有一个 go 程序,当点击 url 时,它以 html 格式提供波形信息。它在带有 nginx 反向代理的虚拟机上运行。

我正在尝试将代码移至 aws lambda,但我很难理解如何触发和返回 html。

原始代码执行了其逻辑,并在下面的片段中将数据作为模板 html 呈现。

func indexhandler(w http.responsewriter, r *http.request) {
    getweather()
    getsurf()
    checksurf(forecastgroup)
    p := codcallpage{title: "swell forecast", runtime: htmlrundate, dailyhtmldata: dailymatchingswells}
    codcalltemplateinit.execute(w, p)
}

func main() {
    http.handlefunc("/", indexhandler)
    http.listenandserve(":8000", nil)
}
登录后复制

我相信我不再需要 nginx 代理,而是需要调用 lambda 函数来运行我的代码。所以我将代码更改为以下内容。

func indexhandler(w http.responsewriter, r *http.request) {
    getweather()
    getsurf()
    checksurf(forecastgroup)
    p := codcallpage{title: "swell forecast", runtime: htmlrundate, dailyhtmldata: dailymatchingswells}
    codcalltemplateinit.execute(w, p)
}

func handler(ctx context.context, request events.apigatewayproxyrequest) error {
    log.println("via lambda !!")
    http.handlefunc("/", indexhandler)
}

func main() {
    lambda.start(handler)
}
登录后复制

当我运行 aws 测试时,lba 函数使用默认的 json 文本。

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}
登录后复制

超时时出现错误:

{
  "errorMessage": "2023-06-08T08:43:13.714Z d6e2acc0-b1da-4e92-820b-63f8f5050947 Task timed out after 15.01 seconds"
}
登录后复制

我不确定 lambda 函数是否忽略了测试,或者该函数没有以正确的方式返回 html,或者 lambda 函数是否需要 json 而不是 html?有什么指示可以帮助我理解以及我应该看哪里吗?

解决方法

无需在 lambda 函数上运行 http 服务器。这段代码应该可以工作

func indexhandler(ctx context.context, req events.apigatewayproxyrequest) (string, error)  {
        getweather()
        getsurf()
        checksurf(forecastgroup)
        p := codcallpage{title: "swell forecast", runtime: htmlrundate, dailyhtmldata: dailymatchingswells}
        var res bytes.buffer
        if err := codcalltemplateinit.execute(&res, p); err != nil {
          return "", err 
        }
        return res.string(), nil
}


func main() {
        lambda.start(indexhandler)
}
登录后复制

使用aws api网关代理,您需要返回return events.apigatewayproxyresponse,因此indexhandler将有所不同。

func indexHandler(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error)  {
        GetWeather()
        GetSurf()
        CheckSurf(ForecastGroup)
        p := CodCallPage{Title: "Swell Forecast", RunTime: htmlRunDate, DailyHtmlData: DailyMatchingSwells}
        var res bytes.Buffer
        if err := codcallTemplateInit.Execute(&res, p); err != nil {
          return events.APIGatewayProxyResponse{StatusCode: 400, Body: err.Error()}, err 
        }
        return events.APIGatewayProxyResponse{Body: res.String(), StatusCode: 200}, nil
}

登录后复制

以上是如何从 Go Lambda 函数返回 HTML?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板