【发布时间】:2021-05-05 06:11:22
【问题描述】:
我创建了一个使用延迟加载和标准角度路由设置的 Angular 应用程序,当我在本地运行应用程序时,此设置运行良好。但是,当我尝试从 azure blob 存储中提供它时,当我在应用程序中导航时会收到 404。
Azure 存储static site 已启用,当我导航到根页面时,它会显示出来。
我需要实施哪些 Azure 配置来解决此问题?
请注意: 为了使这个问题尽可能简洁,我在代码下方添加了我的尝试。此外,我不确定哪些 Azure 配置适合添加,所以我在请求之前将它们排除在外。
app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', loadChildren: () => import('./feature-modules/home/home.module').then(h => h.HomeModule) },
{ path: 'roadmap', loadChildren: () => import('./feature-modules/roadmap/roadmap.module').then(h => h.RoadmapModule) },
{ path: 'games', loadChildren: () => import('./feature-modules/games/games.module').then(h => h.GamesModule) },
{ path: 'locations', loadChildren: () => import('./feature-modules/locations/locations.module').then(h => h.LocationsModule) },
{ path: 'tasks', loadChildren: () => import('./feature-modules/site-tasks/site-tasks.module').then(h => h.SiteTasksModule) },
{ path: 'contact', loadChildren: () => import('./feature-modules/contact/contact.module').then(h => h.ContactModule) },
{ path: '**', loadChildren: () => import('./feature-modules/not-found/not-found.module').then(h => h.NotFoundModule) },
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [RouterModule]
})
export class AppRoutingModule { }
Roadmap-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { RoadmapComponent } from './roadmap/roadmap.component';
const routes: Routes = [
{ path: '', component: RoadmapComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class RoadmapRoutingModule { }
我的尝试
尝试 1
将错误文档路径设置为 index.html as suggested here,它允许提供页面,但在您查看开发人员工具时仍返回 404。发生这种情况是因为页面刷新时找不到请求的页面,但是发生了角度路由并找到了请求的页面。拥有 404 远非理想,所以我继续寻找
尝试 2
我看到this suggestion 并改变了我的app-routing.ts 如下所示
imports: [RouterModule.forChild(routes, { useHash: true})],
尝试 3
我找到了this solution,但它并不真正适用于我的情况,因为他们通过 CDN 为他们的应用程序提供服务,这不是我目前需要的
尝试 4
This suggestion 对我不起作用。我尝试创建一个 routes.json 然后发现它已被弃用并添加了 staticwebapp.config.json 对我没有用
任何帮助或建议都会得到极大的欢迎
【问题讨论】:
-
我只能指出,除了尝试 2 中提到的哈希定位策略之外,Angular 级别没有其他选项可以帮助您。这个问题是通过网络服务器配置解决的。在这种情况下 - Azure
-
@IAfanasov 感谢您的评论。我想我的问题不是很清楚,我不是在寻找基于 Angular 的解决方案。我正在尝试找出我在 azure 中错过的配置,以使我的 SPA 正常工作。我会相应地更新我的问题。谢谢
-
只是为了明确尝试 4 是关于 Azure 静态 Web 应用程序,而不是启用了静态托管的 blob 存储,因此无论如何这都行不通。我也有同样的问题,并使用尝试 1 作为解决方案。如果您不想要 404 和散列,那么我认为使用带有规则的 CDN 是唯一的选择。因为 Blob 存储静态托管不是专门为 SPA 创建的,但我们将其用作一个选项。因此,我认为您没有错过任何内容,这就是 Blob 存储静态托管如何为具有路由的 SPA 工作的。
标签: angular azure-storage single-page-application