Ich versuche, eine React-Site von einem Play Framework-Server aus zu hosten. Das React-Front-End wird in einem separaten Projekt entwickelt und seine Build-Artefakte (statische html/js/css/etc. Dateien) werden in den Ordner public
des Play-Projekts kopiert.So erstellen Sie die try_files von nginx in Play Framework neu, um die React-Site zu hosten
Jetzt habe ich versucht, z./page1 (wo das eine React-Route ist), aber ich bekomme einen 404, weil der Server natürlich keine solche Route hat.
Was ich will, ist Nginx try_files $uri /index.html
Art der Funktionalität zu replizieren - wenn der Pfad, der gefragt wird, bedient werden kann (d. H. Es entspricht einem Asset, das der Server kennt), wird es serviert. Sonst, serviere den Inhalt von index.html ohne die URL neu schreiben, so dass React's Routing funktionieren kann.
Ich habe versucht, dies mit nur der Datei und auch als Controller (mit einem if/sonst) zu arbeiten. Ich konnte nicht genau replizieren, was in nginx ein Einzeiler ist. Wie könnte ich das tun?
Dies funktionierte perfekt im" dev mode ", scheiterte aber im prod mode. Insbesondere scheint es, dass Sie 'f.listFiles' in Zeile 25 Ihres Gist nicht verwenden können, es explodiert mit einer' NullPointerException'. Ich musste den Gist wie folgt modifizieren, um es sowohl für den Dev- als auch den Prod-Modus arbeiten zu lassen: https://gist.github.com/mrubin/211f007508cd90f471d697132727808c – iraxef
Beachten Sie, dass Sie den expliziten 'Index' loswerden könnten Route, wenn Sie wollten, wenn Sie die Route wie folgt umgeschrieben: 'GET/$ Pfad <.*> controllers.FrontEndServingController.frontEndPath (Pfad)' – iraxef
Danke für die Beiträge und Vorschläge @iraxef! – millhouse