2017-11-18 2 views
0

Ich habe eine eckige Anwendung mit Lazy Loading bereitgestellt. Die Anwendung funktioniert perfekt, wenn sie auf der Github.io-Domain gehostet wird, aber ich bekomme einen Fehler, wenn ich die App auf dem Tomcat-Server mit mobaxterm deployed habe. Wenn die Seite neu geladen oder aktualisiert wird, verliert die App den Routingstatus und löst einen 404-Fehler aus.404 Fehler beim Auffrischen für angular (v4 +) auf dem Tomcat-Server

HTTP-Status 404 -/Anfrage

Typ Statusbericht

Nachricht/Anfrage

Beschreibung Die angeforderte Ressource ist nicht verfügbar.

Apache Tomcat/7.0.72

Console-Log :: GET http://appv2.proctur.com/enquiry/addEnquiry 404 (nicht gefunden) navigierenden http://appv2.proctur.com/enquiry/addEnquiry

Wenn ich die App in einem nicht aktualisieren Sie die Seite und dann gehen Sie nutzen ihre OK, verstehe nur nicht, was das Problem bei der Aktualisierung ist.

PS :: Dies ist mein erstes Mal hosting eine eckige Anwendung auf Tomcat-Server, wenn ich einen dummen Fehler machte, lass es mich wissen.

Zur besseren Erklärung, ich füge die routing.module.ts, wo ich die Module faul laden. Dies wird in app.module.ts importiert ::

import { NgModule } from '@angular/core'; 
import { RouterModule } from '@angular/router'; 

@NgModule({ 
imports: [ 
    RouterModule.forRoot([ 
     { path: '', redirectTo: '/authPage', pathMatch: 'full' }, 
     { path: 'authPage', loadChildren: 'app/components/auth-page/auth-page.module#AuthPageModule' }, 
     { path: 'course', loadChildren: 'app/components/course/course.module#CourseModule' }, 
     { path: 'enquiry', loadChildren: 'app/components/enquiry/enquiry.module#EnquiryModule' }, 
     { path: 'student', loadChildren: 'app/components/students/student.module#StudentModule' }, 
    ]) 
], 
exports: [ 
    RouterModule 
] 
}) 
export class AppRoutingModule { 
} 
+0

welchen Routing-Modus verwenden Sie? wie 'html5'? 'hashbang'? Ich sehe kein '#/#!' In deiner URL –

Antwort

0

Wenn Winkeln App Last erstmalige URL von einem Server dienen. Wenn Sie auf Seiten navigieren, wird es auf der Clientseite behandelt. Wenn Sie die Seite aktualisieren, wird die Anfrage an den Server (Tomcat oder Node) gesendet. aber diese geroutete URL existiert nicht auf dem Server. dann kommt 404 Fehler. Sie können nach HashLocationStrategy auflösen, hinzugefügtes {useHash: true} -Objekt in der Routing-Konfiguration, dh.

RouterModule.forRoot(routes, {useHash: true}) 

Weitere Details: - https://codecraft.tv/courses/angular/routing/routing-strategies/#_hashlocationstrategy

0

Die bisherige Antwort ist richtig, aber wir haben nicht wirklich brauchen Hashes in unserer URL-s. Das Problem ist wie folgt: Wenn wir zum Beispiel eine Route mit dem Namen '/ users/all' haben und von '/' in unserer App navigieren, ist das völlig in Ordnung, da Angulars eigener Router die Route auflöst und die Route anzeigt Seite, aber wenn wir direkt zu dieser Route gehen, z Durch Eingabe der URL in der Adressleiste des Browsers erhalten wir 404, Warum? Weil Ihr Server (Tomcat in Ihrem Fall) versuchen wird, einen Ordner namens "Benutzer" und eine "alle" Datei darin zu finden, die offensichtlich nicht existiert, da es nur eine eckige Route ist, keine eigentliche Datei darin das System Ihres Servers. Aber Sie können Ihren Server so konfigurieren, dass er auf Ihre index.html Datei zurückgreift, die die App enthält, so dass die Seiten korrekt angezeigt werden (im Fall unseres Beispiels wird der Server index.html zurückgeben, dann wird die Angular-App) renne und löse die Route). Lesen Sie mehr dazu here.

Verwandte Themen