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

Bagaimana untuk mengembalikan HTML daripada fungsi Go Lambda?

WBOY
Lepaskan: 2024-02-08 21:40:28
ke hadapan
812 orang telah melayarinya

如何从 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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}
Salin selepas log masuk

Ralat semasa tamat masa:

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

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)
}
Salin selepas log masuk

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
}

Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan