Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengembalikan HTML daripada fungsi Go Lambda?

Bagaimana untuk mengembalikan HTML daripada fungsi Go Lambda?

WBOY
WBOYke hadapan
2024-02-08 21:40:28809semak imbas

如何从 Go Lambda 函数返回 HTML?

PHP Editor Shinichi akan menjawab soalan ini secara terperinci apabila dia memperkenalkan cara mengembalikan HTML daripada fungsi Go Lambda. Fungsi Go Lambda ialah fungsi yang berjalan di awan dan mengembalikan halaman HTML, yang merupakan keperluan biasa untuk banyak pembangun web. Dalam artikel ini, kami akan meneroka cara menulis fungsi Lambda dalam Go dan mengembalikannya sebagai halaman HTML untuk penggunaan di bahagian hadapan. Dengan panduan artikel ini, anda akan dapat melaksanakan fungsi mengembalikan HTML daripada fungsi Go Lambda dengan mudah. Jom mulakan sekarang!

Kandungan soalan

Saya mempunyai program go yang menyediakan maklumat bentuk gelombang dalam format html apabila url diklik. Ia berjalan pada mesin maya dengan proksi terbalik nginx.

Saya cuba mengalihkan kod ke aws lambda tetapi saya menghadapi masalah memahami cara mencetus dan mengembalikan html.

Kod asal melaksanakan logiknya dan menjadikan data sebagai html templat dalam coretan di bawah.

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)
}

Saya percaya saya tidak lagi memerlukan proksi nginx, sebaliknya perlu memanggil fungsi lambda untuk menjalankan kod saya. Jadi saya menukar kod kepada yang berikut.

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)
}

Apabila saya menjalankan ujian aws, fungsi lba menggunakan teks json lalai.

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

Ralat semasa tamat masa:

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

Saya tidak pasti sama ada fungsi lambda mengabaikan ujian, atau fungsi itu tidak mengembalikan html dengan cara yang betul, atau jika fungsi lambda menjangkakan json dan bukannya html? Sebarang petunjuk untuk membantu saya memahami dan di mana saya harus mencari?

Penyelesaian

Tidak perlu menjalankan pelayan http pada fungsi lambda. Kod ini sepatutnya berfungsi

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)
}

Dengan proksi gerbang aws api anda perlu mengembalikan pulangan events.apigatewayproxyresponse,因此indexhandlerakan berbeza.

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
}

Atas ialah kandungan terperinci Bagaimana untuk mengembalikan HTML daripada fungsi Go Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam