刷新页面会导致 404 错误 - Angular 6

2024-04-05

我正在构建一个应用程序的帮助Angular6并面临路由问题。一切routes当我单击特定选项卡时正在工作,但每当我refresh当前页面,它正在抛出404错误。我在堆栈溢出上看到了很多关于这个问题的帖子,但未能克服这个问题。

下面是我的 app.module.ts

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {AppComponent} from './app.component';
import {FetchApiComponent} from './fetch-api/fetch-api.component';
import {FormsModule} from '@angular/forms';
import {HttpClientModule} from '@angular/common/http';
import {UserServiceLatest} from './fetch-latest/app.service';
import {UserServiceTop} from './fetch-top/app.service';
import {YoutubePlayerModule} from 'ngx-youtube-player';
import {SidebarComponent} from './sidebar/sidebar.component';
import {FetchLatestComponent} from './fetch-latest/fetch-latest.component';
import { FetchTopComponent } from './fetch-top/fetch-top.component'
import {UserService} from './fetch-api/app.service';
import { ServiceWorkerModule } from '@angular/service-worker';
import { environment } from '../environments/environment';
import { AngularFireModule } from 'angularfire2';
import * as firebase from 'firebase';
import { firebaseConfig } from './../environments/firebase.config';
import { AngularFireDatabaseModule } from 'angularfire2/database';
import {PushService} from './push.service';

const appRoutes: Routes = [
  {
    path: '',

  component: FetchApiComponent
  }, 
{
    path: '/latest',

    component: FetchLatestComponent
  },
{
    path: '/top',

    component: FetchTopComponent
  },
{
path :'*',
component: FetchApiComponent 
}

];

firebase.initializeApp(firebaseConfig);

@NgModule({
  declarations: [
    AppComponent,
    FetchApiComponent,SidebarComponent, FetchLatestComponent, FetchTopComponent
  ],
  imports: [
    RouterModule.forRoot(appRoutes),
    BrowserModule, YoutubePlayerModule,
    FormsModule,
    AngularFireModule.initializeApp(firebaseConfig),
    AngularFireDatabaseModule,environment.production ?ServiceWorkerModule.register('firebase-messaging-sw.js'):[],ServiceWorkerModule.register('/firebase-messaging-sw.js', { enabled: environment.production }),
    HttpClientModule,environment.production ? ServiceWorkerModule.register('ngsw-worker.js') : [], ServiceWorkerModule.register('/ngsw-worker.js', { enabled: environment.production })
  ],
  providers: [UserService,UserServiceTop,UserServiceLatest,PushService],

  bootstrap: [AppComponent]
})
export class AppModule {}

你能指出我正确的方向吗?


您将在示例网址中看到,一旦收到 404 错误,您就无法使其工作,但如果您之前包含一个哈希值特定于角度的 url,例如/#latest它会起作用的。

为什么刷新时停止工作?你的网络服务器正在拦截 GET来自您的浏览器的请求并尝试直接进入该目录/latest,它不存在。它不知道它需要去/bosv2,找到一个 Angular 应用程序,然后将小结尾位添加到您的路径中,该路径不是真实的目录,而是 Angular 的路由。在你的本地,它会像你在做 ng 服务时一样工作,webpack webserver 已经为此做好了准备,但不是你托管应用程序的主机。

默认情况下,角度正在使用HTML5风格导航,但是根据您当前的网络服务器设置,您将需要旧的 angularjs 样式(带有 hash#)。

从这里开始,你有两种解决方案:

  1. 更改您的网络服务器配置
  2. 告诉 Angular 使用 HashLocationStrategy (完全有效的解决方案),您可以通过提供旧式的 HashLocationStrategyuseHash: true作为 AppModule 中 RouterModule.forRoot 的第二个参数。

    @NgModule({ 进口:[ ... RouterModule.forRoot(routes, { useHash: true }) // .../#/latest/ ], ...

我想说的是,哈希风格有一个有几个缺点,这可能与您的场景无关:

  1. 它不会生成更易于用户理解和记住的干净且 SEO 友好的 URL。
  2. 您无法利用服务器端渲染。

希望这个答案对您有所帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

刷新页面会导致 404 错误 - Angular 6 的相关文章

随机推荐

  • 如何使用 CakePHP APP 类从 URL 加载 XML 文件?

    我正在使用 CakePHP XmlHelper 来解析 XML 文件 例如 App import Xml file my xml file xml parsed xml new XML file 我如何使用它从 URL 加载 XML 文件
  • MySQL 日期比较过滤器

    我有一些运行良好的 SQL 代码 并从我的 Wordpress 数据库返回所需的结果 但是 我根本无法理解如何过滤以下日期之间的日期 2010 12 10 00 00 00 and 2010 12 15 00 00 00 这是我的 SQL
  • 如何使用 ffmpeg-python 在视频上叠加帧序列?

    我在下面尝试过 但它只显示背景视频 background video ffmpeg input input mp4 overlay video ffmpeg input f frames folder png pattern type gl
  • 跳过多个号码

    我正在尝试将正则表达式用于我正在做的工作项目 我有一组数字 如下所示 23 14 62 121 98 0 0 0 1 0 0 0 2 165 60 00 24 13 64 118 101 0 0 0 1 0 0 0 2 165 60 00
  • VBA更改模块中的实例变量(excel)

    在 VBA 中 我需要一个模块 sub 来告诉实例设置一些变量 在模块 1 中我有 Sub Load ThisWorkbook SetupVariables ThisWorkbook TestVariables End Sub 在本工作簿中
  • 在Windows下使用通过MSYS2安装的cmake 3.5.2,缺少“MinGW Makefiles”生成器

    我正在尝试使用 MinGW 作为编译器 在 Windows 下进行 hello world 测试来制作 cmake 这个答案 https stackoverflow com a 4101496 4063051建议运行cmake与 G标志如下
  • 在 Mac OS X 中从相机捕获视频

    如何在 MacOS X 中过滤来自摄像头的视频流 我编写了 QuickTime 序列采集器通道组件 但仅当应用程序使用 SG API 时它才有效 如果应用程序使用 QTKit Capture 则该组件无法工作 有人知道我该如何实施它吗 您可
  • 如何围绕未正确发布的值演示竞争条件?

    我正在阅读 Java 并发实践 并查看第 51 页的示例代码 根据该书 这段代码如果没有正确发布 就有失败的风险 因为我喜欢编写示例代码并分解它们以证明它们是如何工作的 我尝试让它抛出 AssertionError 但失败了 引导我走向我的
  • Prolog,如何在 write() 中显示多个输出

    go match Mn Fn write Matching Result nl write Mn write match with write Fn match Mn1 Fn1 person may female 25 blue perso
  • 如何在java中打开所有以特定前缀开头的文件?

    有没有办法在Java中打开以特定名称开头的目录中的某些文本文件 例如 在我的目录中 我有以下文件 Ab 01 txt Ab 02 txt Ab 03 txt Ab 04 txt SomethingElse txt NotRelated tx
  • 学说问题(映射不一致)

    我正忙于 Symfony 中的一个项目 我只是检查分析器选项卡并看到 2 个错误不断弹出 它们如下 The mappings MyBundle MainBundle Entity School provinceId and MyBundle
  • 在 netbeans 中创建/访问库

    我是新的 netbeans 用户 在导入用户创建的库时遇到问题 我创建了一个名为 MyLibrary 的库 然后 我将一个包含我保存的项目 名为 netbeansProjects 的文件夹添加到类路径中 该文件夹是我在 netbeans I
  • mysql_connect 在远程主机连接上返回“无法通过套接字连接到本地 MySQL 服务器”?

    我有一台服务器返回一个意外的间歇性错误 想知道是否有人以前经历过它或者可以猜测可能会发生什么 到目前为止我的搜索还没有结果 我以通常的方式使用 mysql connect 连接到远程 mysql 服务器 但在过去 2 周 每天几次 与数据库
  • 我应该何时以及如何使用枚举类而不是枚举?

    一位开发人员最近开始在通常适合枚举的地方使用类模式而不是枚举 相反 他使用类似于下面的内容 internal class Suit public static readonly Suit Hearts new Suit public sta
  • 如何为 keras lstm 输入重塑数据?

    我是 Keras 新手 我发现很难理解 LSTM 层输入数据的形状 Keras 文档表示输入数据应该是形状为 nb samples timesteps input dim 的 3D 张量 我有808信号 每个信号有22个通道和2000个数据
  • 是否有可能调用 WriteFile 并且应用程序将永远等待回调?

    我调用该方法win32 WriteFile然后我打电话 WaitForSingleObject handle INFINITE 与我在中使用的相同手柄WriteFile call 是否可以有某种场景让我永远等待 然后WriteFile不会完
  • 带 url-loader 的 Webpack 内联字体

    我正在尝试将一些字体内联为 base64 编码的数据 URI 但我对 Webpack 的 url loader 没有什么运气 这很奇怪 因为 url loader 似乎只是为我的图像和 svg 文件执行此操作 我的设置如下 目录结构 roo
  • IO monad 的逻辑 AND 严格性

    我正在尝试用 Haskell 编写一个简单的程序 它基本上应该并行运行两个 shell 命令 这是代码 import System Cmd import System Exit import Control Monad exitCodeTo
  • 如何在 C# 应用程序中使用代理

    我正在使用 Microsoft Visual Studio 2010 C net 4 0 我有一个网络浏览器元素 我想做的是使用代理通过 Webbrowser 元素进行导航 我怎样才能做到这一点 谢谢 浏览器控件只是 IE 的一个实例 它将
  • 刷新页面会导致 404 错误 - Angular 6

    我正在构建一个应用程序的帮助Angular6并面临路由问题 一切routes当我单击特定选项卡时正在工作 但每当我refresh当前页面 它正在抛出404错误 我在堆栈溢出上看到了很多关于这个问题的帖子 但未能克服这个问题 下面是我的 ap