Heim > Backend-Entwicklung > Golang > Wie kann ich HTML von der Go Lambda-Funktion zurückgeben?

Wie kann ich HTML von der Go Lambda-Funktion zurückgeben?

WBOY
Freigeben: 2024-02-08 21:40:28
nach vorne
812 Leute haben es durchsucht

如何从 Go Lambda 函数返回 HTML?

PHP-Editor Shinichi wird diese Frage ausführlich beantworten, wenn er vorstellt, wie man HTML aus der Go Lambda-Funktion zurückgibt. Eine Go Lambda-Funktion ist eine Funktion, die in der Cloud ausgeführt wird und eine HTML-Seite zurückgibt, was für viele Webentwickler eine häufige Anforderung ist. In diesem Artikel erfahren Sie, wie Sie eine Lambda-Funktion in Go schreiben und sie als HTML-Seite zur Verwendung durch das Frontend zurückgeben. Mit der Anleitung dieses Artikels können Sie die Funktion zur Rückgabe von HTML aus einer Go-Lambda-Funktion problemlos implementieren. Fangen wir jetzt an!

Frageninhalt

Ich habe ein Go-Programm, das Wellenforminformationen im HTML-Format bereitstellt, wenn auf eine URL geklickt wird. Es läuft auf einer virtuellen Maschine mit Nginx-Reverse-Proxy.

Ich versuche, den Code nach AWS Lambda zu verschieben, aber ich habe Probleme zu verstehen, wie der HTML-Code ausgelöst und zurückgegeben wird.

Der Originalcode führt seine Logik aus und rendert die Daten als Vorlagen-HTML im folgenden Snippet.

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)
}
Nach dem Login kopieren

Ich glaube, ich brauche den Nginx-Proxy nicht mehr, sondern muss stattdessen die Lambda-Funktion aufrufen, um meinen Code auszuführen. Also habe ich den Code wie folgt geändert.

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)
}
Nach dem Login kopieren

Wenn ich den AWS-Test ausführe, verwendet die LBA-Funktion den Standard-JSON-Text.

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}
Nach dem Login kopieren

Fehler bei Zeitüberschreitung:

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

Ich bin mir nicht sicher, ob die Lambda-Funktion den Test ignoriert oder ob die Funktion HTML nicht auf die richtige Weise zurückgibt oder ob die Lambda-Funktion JSON anstelle von HTML erwartet? Irgendwelche Hinweise, die mir helfen zu verstehen und wo ich suchen sollte?

Workaround

Keine Notwendigkeit, den HTTP-Server auf der Lambda-Funktion auszuführen. Dieser Code sollte funktionieren

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)
}
Nach dem Login kopieren

Mit dem AWS-API-Gateway-Proxy müssen Sie die Rückgabe events.apigatewayproxyresponse,因此indexhandlerverschieden machen.

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
}

Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich HTML von der Go Lambda-Funktion zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage