Comment implémenter le routage frontend dans les applications Go
Problème :
Lors de l'accès à un path (/my_frontend_path) directement dans votre navigateur pour une application Go servant l'interface React, vous rencontrez une erreur 404. En effet, le serveur Go ne reconnaît pas le chemin, ce qui entraîne une requête de la page auprès du serveur.
Solution :
Déléguer les chemins non reconnus au frontend React Router, vous pouvez mettre en œuvre l'une des plusieurs approches suivantes :
1. Historique de hachage
L'historique de hachage est recommandé dans la question liée et implique l'ajout de # à l'URL pour le routage côté client. Cela garantit que le serveur n'interprète pas le chemin et permet au routeur frontal de le gérer.
2. Approche fourre-tout
Pour une solution purement côté serveur, vous pouvez implémenter une approche fourre-tout qui renvoie index.html pour tout chemin non reconnu. Cela garantit que l'application frontale est chargée et que le routeur peut détecter et acheminer le chemin en conséquence.
Voici comment l'implémenter dans Go :
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 the requested file exists then return if; otherwise return index.html (fileserver default page) 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 so we return the default (resolves to index.html) r.URL.Path = "/" } } fs.ServeHTTP(w, r) }) http.ListenAndServe(":8090", nil) }
Remarque : Cette approche renverra index.html pour tous les chemins non reconnus, y compris les fichiers inexistants. Vous pouvez envisager d'ajouter des limitations, telles que la vérification des extensions de fichiers, si cela pose un problème.
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!