Maison >développement back-end >Golang >Comment gérer les erreurs 404 pour les routes frontales dans un serveur Go ?

Comment gérer les erreurs 404 pour les routes frontales dans un serveur Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-24 14:39:15192parcourir

How to Handle 404 Errors for Frontend Routes in a Go Server?

Gestion des erreurs 404 pour les routes frontales non résolues dans Go

Dans une configuration de serveur avec à la fois une application frontale React et une API Go, accès à une interface inexistante route (par exemple, http://localhost:8090/my_frontend_path) entraîne une erreur 404. Pour résoudre ce problème, il existe plusieurs approches, dont l'une consiste à utiliser une stratégie « fourre-tout » sur le serveur.

Approche « Catch-All »

Cette La méthode garantit que pour tout chemin non explicitement géré ailleurs, le serveur renvoie la page index.html. Comme l'application frontend est chargée avec index.html, elle peut alors gérer elle-même le routage.

Une implémentation simple dans Go :

const FSPATH = "./build/"

func main() {
    fs := http.FileServer(http.Dir(FSPATH))

    http.HandleFunc("/my_api", func(w http.ResponseWriter, _ *http.Request) { w.Write([]byte("API CALL")) })
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // Return index.html if the requested file doesn't exist
        if r.URL.Path != "/" {
            fullPath := FSPATH + strings.TrimPrefix(path.Clean(r.URL.Path), "/")
            _, err := os.Stat(fullPath)
            if err != nil {
                if !os.IsNotExist(err) {
                    panic(err)
                }
                r.URL.Path = "/"
            }
        }
        fs.ServeHTTP(w, r)
    })
    http.ListenAndServe(":8090", nil)
}

En vérifiant l'existence du fichier et en revenant à index.html s'il n'est pas trouvé, ce code garantit que le routeur React prend le relais et gère le routage pour tous les chemins. Cette approche fournit une solution simple côté serveur pour rediriger toutes les routes non résolues vers le frontend.

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:
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