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
Libérer: 2024-02-08 21:40:28
avant
817 Les gens l'ont consulté

如何从 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)
}
Copier après la connexion

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)
}
Copier après la connexion

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

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}
Copier après la connexion

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"
}
Copier après la connexion

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)
}
Copier après la connexion

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
}

Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal