当未收到对象时比较值(TypeScript,Aurelia)

时间:2019-04-23 12:59:53

标签: typescript compare aurelia router string-comparison

我正在尝试比较定义的role(在我的app.ts中)和从WebServer起的已恢复角色。但是,当我没有登录时,比较值就会出现问题:

这就是我在做什么:

export class RoutingAuthorizeStep {

 public readonly userIdentity: UserIdentityModel;

 constructor (userIdentity: UserIdentityModel) {
    this.userIdentity = userIdentity;}

  run(navigationInstruction: NavigationInstruction, next: Next) : Promise<any> {

  let requiredRoles = navigationInstruction.getAllInstructions()
                    .map(i => i.config.settings.roles)[0] as string[];
                    //requiredRoles is example 'superUser'

  let isUserInRole = requiredRoles?
    requiredRoles.some(r => r === this.userIdentity.role) : true;
  }
 }

当我检查调试时: console.log(this.userIdentity.role);

我收到此消息:

aurelia-logging-console.js?dc89:45 ERROR [app-router] TypeError: 
                                                  Cannot read property 'role' of undefined
at RoutingAuthorizeStep.run (routing-authorize-step.ts?008f:30)
at next (aurelia-router.js?e32b:433)

2 个答案:

答案 0 :(得分:2)

我不是Aurelia开发人员,但这似乎是一个简单的JS问题,除非我错了。假设错误在“ isUserInRole”中,则可以执行此操作。

  let isUserInRole = requiredRoles?
    requiredRoles.some(r => this.userIdentity && r === this.userIdentity.role) : true;
  }

基本上,只需在检查其角色之前检查userIdentity是否存在。

希望这会有所帮助!

答案 1 :(得分:1)

我为此解决了这个问题:

 run(navigationInstruction: NavigationInstruction, next: Next) : Promise<any> {
  if (this.userIdentity == null)
  {
    //return to login
  }
  else
  {
     let requiredRoles: string;
     requiredRoles = navigationInstruction.getAllInstructions()
                                          .map(i => i.config.settings.roles)[0];    
      if (requiredRoles === this.userIdentity.role)
       {        
        return next();
       }
        //return to login
   }
}

正在工作。但是requiredRoles.some还是有问题-也许有些library is missing