angular - '并非所有代码路径都返回一个值' Angular
问题描述
我正在构建一个小项目,我基本上是在处理添加 Angular 路由保护。我遇到了错误“并非所有代码路径都返回值”。有什么问题?我是开发新手。
auth.guard.ts
import { map } from 'rxjs/operators';
import { AccountService } from './../_services/account.service';
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from
'@angular/router';
import { Observable } from 'rxjs';
import { ToastrService } from 'ngx-toastr';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private accountService: AccountService, private toastr:
ToastrService) { }
canActivate(): Observable<boolean> {
return this.accountService.currentUser$.pipe(
map(user => {
if (user) {
return true;
}
this.toastr.error('Access Denied');
}
)
)
}
}
应用程序路由.module.ts
import { MemberDetailComponent } from './members/member-detail/member-detail.component';
import { MemberListComponent } from './members/member-list/member-list.component';
import { HomeComponent } from './home/home.component';
import { NgModule, Component } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ListsComponent } from './lists/lists.component';
import { MessagesComponent } from './messages/messages.component';
import { AuthGuard } from './_guards/auth.guard';
const routes: Routes = [
{path: '', component: HomeComponent},
{path: 'members', component: MemberListComponent, canActivate: [AuthGuard]},
{path: 'members/:id', component: MemberDetailComponent} ,
{path: 'lists', component: ListsComponent} ,
{path: 'messages', component: MessagesComponent} ,
{path: '**', component: HomeComponent, pathMatch: 'full'}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
这是auth.guard.ts app-routing.module.ts 文件的截图
解决方案
这可能是因为只有当用户存在并且用户为空时才返回值,则不会返回任何内容。
rxjs
map 在所有情况下都应始终返回值
canActivate(): Observable<boolean> {
return this.accountService.currentUser$.pipe(
map(user => !!user),
tap(user => user || this.toastr.error('Access Denied'); )
)
}
我相信这可以解决您的问题
推荐阅读
- javascript - 如何在反应中使用路由器在具有键值对的组件之间切换
- php - Laravel 8:如何使隐式模型绑定路由参数可选而不是抛出 404?
- node.js - 是否有任何类似于 c# 上的 Environment.TickCount 的 NodeJs 类/函数?
- javascript - 我似乎找不到错误
- laravel - 我的网站不输出 laravel 页面...我该怎么办?
- php - 我想从表 sql 中获取数据
- ckeditor - this.props.editor.create 不是 CKEditor 中的函数 - NextJS
- android - 海量数据解包时如何减少Message Pack库的解析时间
- javascript - Discord JS:我想在机器人所在的每个公会中向名为“general”的频道发送嵌入信息,但出现错误
- html - 将属性添加到 css