首頁  >  文章  >  後端開發  >  如何從 Go Lambda 函數傳回 HTML?

如何從 Go Lambda 函數傳回 HTML?

WBOY
WBOY轉載
2024-02-08 21:40:28744瀏覽

如何从 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刪除