刷新后角度路由失败(角度路由与服务器路由同名)

时间:2018-05-02 11:47:58

标签: angular express routing mean-stack

我对Angular(版本5)有一个奇怪的问题,我在其中设置了一些像角度一样的路线:

{path: 'calendar',  canActivate: [AuthGuard], component: ProjectsComponent }
{path: 'map',  canActivate: [AuthGuard], component: MapComponent }

然后在我的网页标题中有一些按钮将激活这些路线。

<li routerLinkActive="active"><a [routerLink]="['/calendar']">Kalender</a></li>
<li routerLinkActive="active"><a [routerLink]="['/map']">Kaart</a></li>

一切都适合/日历但是/ map有问题。 首先点击/映射按钮加载组件,然后组件向服务器api发送一个获取请求以获取一些数据,并发送令牌进行身份验证,不用担心。

当我刷新(或手动输入localhost:3000 / map)时,角度应用程序不会拾取路径,而是将空的GET请求发送到服务器,绕过角度路由。 所以yes / map是一个有角度的路由,但也可以作为服务器上的get请求。当我将服务器端路由名称更改为其他名称时,不会发生此行为,因此它确实与名称相同。我认为名称相似性不应该是一个问题,因为角度应该首先选择那些网址请求?或者不是?

空获取请求: enter image description here

AuthGuard(纯粹检查用户是否登录到客户端,后端是否受到每个请求的身份验证):

export class AuthGuard implements CanActivate {

  constructor(private authService: AuthService,
              private router: Router) {}

  canActivate(route: ActivatedRouteSnapshot,
              state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

     if (this.authService.isLoggedIn()) {
       return true;
     } else {
        this.router.navigate(['auth', 'login']);
        return false;
     }
  }

}

2 个答案:

答案 0 :(得分:1)

因此,据我所知,您应该使用HttpClient API来调用服务器端https://angular.io/guide/http,因为这是与服务器端通信的推荐方式。

通常,前端客户端和后端应保持独立,除非您尝试创建在客户端和服务器端都提供内容的同构应用程序,这会增加复杂性。

答案 1 :(得分:0)

这是应用程序时的后端问题(我猜)。你有两个选择:

  1. 将后端配置为始终在R_GetCCallable("stochvol", "update");上重定向,因此后端的任何URL都将始终重定向到基本应用程序URL,并且前端实际上将相应地读取路由。
  2. 使用角度的哈希定位机制,它可以达到这个目的,但您必须更新应用中的所有路线(不推荐)。
  3. 请参阅官方文档链接:

    编辑:更详尽地阅读您的帖子,看起来有点奇怪,我不知道我的答案是否是您问题的解决方案。我现在就这样说吧......也许它会有所帮助。如果没有,我会删除这个答案。