2017-11-18 235 views
0

我部署了一個帶有延遲加載的角度應用程序。當在Github.io域中託管應用程序時,該應用程序運行良好,但當我使用mobaxterm在Tomcat服務器上部署應用程序時出現錯誤。當頁面重新加載或刷新應用程序失去路由狀態並引發404錯誤。404刷新角度(v4 +)時部署在tomcat服務器上的錯誤

HTTP狀態404 - /查詢

類型狀態報告

消息/查詢

描述所請求的資源不可用。

的Apache Tomcat/7.0.72

控制檯,登錄:: GET http://appv2.proctur.com/enquiry/addEnquiry 404(未找到) 導航到http://appv2.proctur.com/enquiry/addEnquiry

如果我不刷新頁面,並使用該應用程序在一個去那麼它的好吧,只是無法理解刷新時的問題。

PS ::這是我第一次在tomcat服務器上託管一個角度應用程序,如果我犯了任何愚蠢的錯誤,請讓我知道。

爲了更好的闡明,我添加了routing.module.ts,我懶加載模塊。這是導入到app.module.ts ::

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

你正在使用哪種路由模式?像'html5'? 'hashbang'?我的網址中沒有看到任何'#/#!' –

回答

0

當角度應用程序加載第一次URL將服務器從服務器。當你瀏覽頁面時,它會在客戶端處理。當刷新頁面時,請求將轉到服務器(tomcat或節點)。但是路由網址在服務器上不存在。然後出現404錯誤。你可以通過HashLocationStrategy來解決,在路由配置中添加{useHash:true}對象。

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

更多細節: - https://codecraft.tv/courses/angular/routing/routing-strategies/#_hashlocationstrategy

0

以前的答案是正確的,但我們並不真正需要在我們的網址-S哈希值。問題如下:例如,如果我們有一個名爲'/ users/all'的路由,並在我們的應用內從'/'導航,那麼它完全沒問題,因爲Angular自己的路由器會解析路由並顯示頁面,但如果我們直接去那條路線,例如通過在瀏覽器地址欄中輸入網址,我們會得到404,爲什麼?因爲你的服務器(在你的情況下是tomcat)將嘗試在其中找到一個名爲'users'和一個'all'文件的文件夾,顯然這是不存在的,因爲它僅僅是一個Angular路由,而不是一個實際的文件你的服務器的系統。但您可以通過某種方式配置服務器,它將回退到包含應用程序的index.html文件,以便頁面正確顯示(在我們的示例中,服務器將返回index.html,那麼Angular應用程序將會運行並解決路線)。 瞭解更多關於here

相關問題