【发布时间】:2018-10-12 12:33:29
【问题描述】:
我在使用 Angular(第 5 版)时遇到了一个特殊问题,我在其中设置了一些 Angular 路由,如下所示:
{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>
对于 /calendar 来说一切都很好,但对于 /map 来说就存在问题。 首先单击 /map 按钮加载组件,然后向服务器 api 发送 get 请求以获取一些数据,并发送令牌进行身份验证,不用担心。
当我刷新时(或手动输入 localhost:3000/map),角度应用程序不会获取路由,而是会绕过角度路由将空 GET 请求发送到服务器。 所以是的 /map 是一个角度路线,但也可以作为服务器上的获取请求。当我将服务器端路由名称更改为其他名称时,不会发生此行为,因此它确实与名称相同有关。我认为名称相似性应该不是问题,因为 Angular 应该首先选择那些 url 请求?还是不行?
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;
}
}
}
【问题讨论】:
-
如果可能,也请出示您的
AuthGuard。 -
如果您从“/map”更改路径名会发生什么,如果问题停止,那么您可以确定问题出在名称上。如果您直接 ping 它,我假设您首先点击获取请求?
-
@hyper0009 是的,只需将我的服务器路由名称更改为 /maps 即可“解决”
标签: angular express routing mean-stack