【问题标题】:'Not all code paths return a value ' Angular'并非所有代码路径都返回一个值' Angular
【发布时间】:2021-08-23 21:19:59
【问题描述】:

我正在构建一个小项目,我基本上是在处理添加 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');
           }
           )
          )
        }

     }

app-routing.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 文件

【问题讨论】:

    标签: angular angular-router-guards


    【解决方案1】:

    有两种代码路径,一种用于if 的真分支,一种用于假分支。 false 分支不返回任何内容,因此出现错误。

    【讨论】:

      【解决方案2】:

      这可能是因为只有当用户存在并且用户为空时才会返回值。

      rxjs map 在任何情况下都应该返回值

      canActivate(): Observable<boolean> {
        return this.accountService.currentUser$.pipe(
          map(user => !!user),
          tap(user => user || this.toastr.error('Access Denied'); )
        )
      }
      

      我相信这可以解决您的问题

      【讨论】:

        【解决方案3】:

        如果用户不可用、无效或 null 或类似情况,您将错过返回 false

        if (user) {
          return true;
        }
        else return false; // add this line
        

        【讨论】:

          猜你喜欢
          • 2017-07-14
          • 1970-01-01
          • 2011-12-17
          • 1970-01-01
          • 1970-01-01
          • 2021-11-08
          • 2013-10-06
          相关资源
          最近更新 更多