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

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

WBOY
WBOYnach vorne
2024-02-08 21:40:28744Durchsuche

如何从 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)
}

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

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

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

Fehler bei Zeitüberschreitung:

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

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

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
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen