【发布时间】:2019-10-15 05:59:36
【问题描述】:
我在自己的 PC 上编写了一个 Angular 项目,当我使用命令 ng serve 在本地运行它时一切正常。现在我想将它部署在 VM 上的 tomcat 上(由我的学校提供),因为我的项目需要公开。
我创建了一个 git 存储库并在 VM 上下载了 angular 项目。按照教程在 tomcat 中部署应用程序,仅包含 2 个步骤:
- 运行
ng build --base-href=/angular/生成一些文件 - 将生成的文件复制到tomcat的
/webapps子文件夹中
但它没有按预期工作。在我看来,路由似乎存在问题。
这是我的路由模块:
const appRoutes: Routes = [
{path: 'coachPortal', component: CoachPortalComponent},
{path: 'userPortal', component: UserPortalComponent},
{path: 'users', component: UsersComponent},
{path: 'userDetails/:id', component: UserDetailsComponent},
{path: 'mySessions', component: MySessionsComponent},
{path: '', redirectTo: '/coachPortal', pathMatch: 'full'},
{path: '**', component: CoachPortalComponent}
];
@NgModule({
imports: [RouterModule.forRoot(appRoutes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
为了在路线之间导航,我使用了这个旧的简单代码:window.location.href = '/users';
当我在我的电脑上本地运行它时,这就像一个魅力。
但我猜想在tomcat上部署后它不再工作的原因是因为tomcat添加了前缀angular/。
在我的电脑上本地运行时,网址为 localhost:4200/{componenturl}。
但在虚拟机上是x.x.x.x:8080/angular/{componenturl}
但由于路由重定向,我收到 404 错误。当我第一次访问根 url x.x.x.x:8080/angular 时,它与规则 {path: '', redirectTo: '/coachPortal', pathMatch: 'full'} 匹配。并加载coachPortal 组件并甚至更改 url 为angular/coachPortal。但是刷新页面或者手动输入angular/coachPortal会报404错误。并且所有其他链接也不起作用。
另外,在 coachPortal 上,我有一个带有 src ../../../assets/logo.png 的图像,它显然没有加载,因为 webapps 文件夹中生成的文件具有不同的文件夹结构......我该如何解决这个问题?图片直接在assets文件夹下。
【问题讨论】:
标签: angular deployment angular2-routing ubuntu-18.04 tomcat9