Maison >développement back-end >Golang >Comment rediriger les routes frontales dans GoLang pour éviter les erreurs 404 ?

Comment rediriger les routes frontales dans GoLang pour éviter les erreurs 404 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-20 18:17:10823parcourir

How to Redirect Frontend Routes in GoLang to Avoid 404 Errors?

Redirection de GoLang vers le routage frontend

Description du problème

Lors de l'accès à des chemins tels que "/my_frontend_path" directement dans le navigateur, GoLang renvoie une erreur 404 à la place de déléguer le routage au routeur frontend React.

Problème Analyse

Le principal problème est que lors de l'accès à de tels chemins avant l'initialisation du routeur React, le serveur gère la demande et renvoie l'erreur.

Solution à serveur unique

Une Une approche simple « Catch-all » côté serveur peut être mise en œuvre pour rediriger tous les chemins non pris en charge vers le routeur frontal. Cette approche fonctionne en renvoyant la page index.html si le fichier demandé n'existe pas, permettant au routeur React de gérer le routage.

Implémentation du code

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) {
        // If requested file exists, return it; otherwise, return index.html
        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)
                }

                // Requested file does not exist, return index.html
                r.URL.Path = "/"
            }
        }
        fs.ServeHTTP(w, r)
    })

    http.ListenAndServe(":8090", nil)
}

Dans cette implémentation :

  • L'existence du fichier demandé est vérifiée.
  • S'il n'existe pas (comme "/my_frontend_path"), la requête est redirigé vers index.html.
  • Le routeur React dans index.html gère ensuite le routage "/my_frontend_path".

Remarque

Cette méthode renvoie index.html pour les fichiers qui n'existent pas, ce qui peut entraîner des problèmes avec des fichiers comme "favicon.ico". Dans de tels cas, des vérifications supplémentaires peuvent être ajoutées pour limiter la redirection uniquement à des extensions spécifiques.

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