goweb/goweb_test.go

56 lines
1.6 KiB
Go
Raw Permalink Normal View History

2018-12-07 09:57:19 +01:00
package goweb
import (
"net/http"
"github.com/go-chi/chi"
2019-07-28 13:11:23 +02:00
containerMiddleware "gitlab.com/wpetit/goweb/middleware/container"
"gitlab.com/wpetit/goweb/service"
"gitlab.com/wpetit/goweb/service/template"
"gitlab.com/wpetit/goweb/template/html"
2018-12-07 09:57:19 +01:00
)
func Example_usage() {
// Exemple d'utilisation de la librairie "goweb" pour la mise en place
// d'une application web avec injection de dépendances - ici un moteur de templates.
2018-12-07 20:30:04 +01:00
// On créé un conteneur de service vide
2018-12-07 09:57:19 +01:00
container := service.NewContainer()
// On expose le service "template" avec l'implémentation
// basée sur le moteur de rendu HTML de la librairie standard
2020-11-16 19:12:29 +01:00
container.Provide(template.ServiceName, html.ServiceProvider(
html.NewDirectoryLoader("./templates"),
))
2018-12-07 09:57:19 +01:00
router := chi.NewRouter()
// On utilise le middleware "ServiceContainer" pour exposer
// le conteneur de service dans nos requêtes
router.Use(containerMiddleware.ServiceContainer(container))
2018-12-07 09:57:19 +01:00
2018-12-07 20:30:04 +01:00
// On créé un handler pour la page d'accueil
2018-12-07 09:57:19 +01:00
router.Get("/", ServeHomePage)
if err := http.ListenAndServe(":3000", router); err != nil {
panic(err)
}
}
2018-12-07 20:30:04 +01:00
// ServeHomePage - Sert la page d'accueil de l'application
2018-12-07 09:57:19 +01:00
func ServeHomePage(w http.ResponseWriter, r *http.Request) {
// On récupère le conteneur de services depuis le contexte de la requête
container := containerMiddleware.Must(r.Context())
2018-12-07 09:57:19 +01:00
// On récupère le service "template" depuis le conteneur de service
templateService := template.Must(container)
// On utilise notre service de template
2018-12-07 09:57:19 +01:00
if err := templateService.RenderPage(w, "my-template.html.tmpl", nil); err != nil {
panic(err)
}
}