nodejs hapi einzelne Seite

8

Ich habe eine einzige App-Site (NodeJS) und möchte von Express zu Hapi migrieren. Normalerweise verwende ich statische Dateien und route alles andere auf eine einzige Seite, die die angularjs-App und die eckige Routing-Konfiguration enthält / p> %Vor%

In HapiJS weiß ich nicht, wie man denselben Code repliziert (ohne express.static Middleware), weil:

%Vor%

Im obigen Code wird jede Anfrage, unabhängig davon, was auf meiner einzelnen Seite zugeordnet wird ('public / html / index.html'), aber wenn ich das tue, dann werden die js, css, jpg & amp; Dateien werden der gleichen Datei zugeordnet, anstatt den Skripten, Stilen und Bildern (eine Anfrage an '/images/bg.png' wird die einzelne Seite anstelle der Bilddatei herunterladen).

Ich weiß, wenn ich den Pfad '/' zu meiner einzigen Seite und dann '{p *}' zu '{directory: {path:' / public '}}' einstelle, dann werde ich das Verhalten haben, dass ich need, aber es gibt einen Haken, wenn ein Benutzer eine bestimmte URL kopiert und einfügt (sagen wir '/ account / login') und dann Enter drückt, wird diese Route in HapiJS gemappt und die Antwort wird 'Not Found (404)' sein , angular routing wird niemals in der Lage sein zu antworten.

Weiß jemand, wie man das löst?

Der Schlüssel der Frage ist:

  • Verwenden Sie nur HapiJS (keine Express- oder andere Middleware)
  • Nicht jede eckige Route routen (nur alles andere routen, das noch nicht auf eine einzelne Seite geroutet wurde, kann das Routing übernehmen)
Amílcar Calles 16.10.2014, 04:04
quelle

5 Antworten

7

Nicht sicher, ob dir das hilft, aber dein Startcode ist für Hapi.js ein bisschen "seltsam". Dies ist, was ich verwende, um ein einfaches hapi.js SPA einzurichten.

Wenn Sie bestimmte URLs wie das Konto / Login verwenden möchten, müssen Sie Ihren Pfad zu diesem bestimmten Abschnitt leiten (Pfad: '/ account / login')

Der Unterschied liegt in der Tatsache, dass ich auf das Verzeichnis als Ganzes zeige, inkl. die verschiedenen Dateien, und Sie antworten einfach auf die Datei index.html. Mit dem Listenparameter können Sie entscheiden, ob Sie die Verzeichnisstruktur in Ihren URLs anzeigen möchten. Standard ist falsch.

Weitere Informationen finden Sie hier: Ссылка

%Vor%
    
Jan_dh 22.10.2014 16:16
quelle
5

Inspiriert von der inaktiven Dokumentation löste ich dies, indem ich alles aus einem statischen Verzeichnis heraus anbot. Dann fügte ich einen onPostHandler hinzu, um die Indexdatei immer dann zurückzugeben, wenn ein 404 zurückgegeben wurde. Ihr clientseitiger Router könnte dann eine Weiterleitung an eine vorhandene 404.html-Datei im statischen Dateiverzeichnis senden.

%Vor%     
Dave Jensen 13.09.2016 06:11
quelle
1

Diese Antwort ist ungültig. Wie @Al jey in dem Kommentar sagte. Hapi haben ihren eigenen Algorithmus, um die Routen zu sortieren, folgen Sie bitte nicht dieser Antwort.

Ähnlich wie expressJS, Hapi Handle Route nach Bestellung. Definieren Sie die Reihenfolge der Routen nach Priorität:

%Vor%     
Hereblur 23.01.2015 11:38
quelle
1

Ich hatte Erfolg mit inert wie beschrieben hier . Wenn Sie nach unten scrollen, finden Sie den Abschnitt "Verzeichnishandler".

Meine Lösung sieht so aus:

%Vor%     
divramod 17.03.2016 19:03
quelle
1

Stellen Sie sicher, dass Sie als Plugin inaktiv sind.

Konfigurieren Sie in Ihrer server.js (oder wie immer Sie es benannt haben) den relativen Pfad für die Bereitstellung statischer Dateien, siehe unten

%Vor%

Dann registrieren Sie für Ihre Route ein neues Routen-Plugin wie unten beschrieben. Dies setzt voraus, dass Sie den Eintrag index.html (für React oder Angular) im öffentlichen Verzeichnis wie oben konfiguriert befinden.

%Vor%

Jedes Mal, wenn HapiJS einen 404-Fehler auslöst, wird die Route an Ihre React / Angular-App weitergeleitet, die dann die Route bearbeiten kann, falls sie existiert.

    
CharlesS 11.12.2016 12:27
quelle

Tags und Links