Maison >développement back-end >Golang >Comment renvoyer du HTML à partir de la fonction Go Lambda ?

Comment renvoyer du HTML à partir de la fonction Go Lambda ?

WBOY
WBOYavant
2024-02-08 21:40:28810parcourir

如何从 Go Lambda 函数返回 HTML?

L'éditeur PHP Shinichi répondra à cette question en détail lorsqu'il présentera comment renvoyer du HTML à partir de la fonction Go Lambda. Une fonction Go Lambda est une fonction qui s'exécute dans le cloud et renvoie une page HTML, ce qui est une exigence courante pour de nombreux développeurs Web. Dans cet article, nous allons explorer comment écrire une fonction Lambda dans Go et la renvoyer sous forme de page HTML pour une consommation par le front-end. Avec les conseils de cet article, vous pourrez facilement implémenter la fonction de renvoi HTML à partir d'une fonction Go Lambda. Commençons maintenant !

Contenu de la question

J'ai un programme go qui fournit des informations sur la forme d'onde au format HTML lorsqu'on clique sur une URL. Il s'exécute sur une machine virtuelle avec un proxy inverse nginx.

J'essaie de déplacer le code vers AWS lambda mais j'ai du mal à comprendre comment déclencher et renvoyer le code HTML.

Le code d'origine exécute sa logique et restitue les données sous forme de modèle HTML dans l'extrait ci-dessous.

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

Je pense que je n'ai plus besoin du proxy nginx, mais que je dois plutôt appeler la fonction lambda pour exécuter mon code. J'ai donc changé le code comme suit.

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

Lorsque j'exécute le test aws, la fonction lba utilise le texte json par défaut.

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

Erreur lors de l'expiration du délai :

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

Je ne sais pas si la fonction lambda ignore le test, ou si la fonction ne renvoie pas le HTML de la bonne manière, ou si la fonction lambda attend du JSON au lieu du HTML ? Des conseils pour m'aider à comprendre et où dois-je chercher ?

Solution

Pas besoin d'exécuter le serveur http sur la fonction lambda. Ce code devrait fonctionner

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

Avec le proxy AWS api gateway, vous devez retourner le retour events.apigatewayproxyresponse,因此indexhandlersera différent.

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
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer