【问题标题】:TypeError: can not read property toString() of Undefined [closed]TypeError:无法读取未定义的属性 toString() [关闭]
【发布时间】:2021-07-03 21:16:14
【问题描述】:

我的 Angular 项目中有一个登录组件,我想在用户登录系统时通过 localStorageService 保存用户 ID。

我的登录组件:

 login(){

    if(this.loginForm.valid){
      let loginModel = Object.assign({},this.loginForm.value)
      this.authService.login(loginModel).subscribe(response=>{
        this.toastrService.success(response.message)
        this.getUser(loginModel.email);
        this.localStorageService.addToken(response.data)
        this.router.navigate([""])
      },responseError=>{
        console.log(responseError)
        this.toastrService.error(responseError.error)
      })
    }
  }

和本地存储服务:

 addCurrentUserId(user:User){
    localStorage.setItem("currentUserId",user.id.toString());
  }

当用户登录系统,我点击F12,出现这个错误:

core.js:6456 ERROR TypeError: Cannot read property 'toString' of undefined
    at LocalStorageServiceService.addCurrentUserId (local-storage-service.service.ts:43)

【问题讨论】:

  • 我认为错误是不言自明的,user.id 未定义检查您在用户内部获取的数据。如果使用 mongoDb,它很有可能是 user._id 而不是 user.id
  • 请不要破坏您的帖子。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本,因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: javascript angular typescript


【解决方案1】:

一些错误或通常非常明确! :p

在您的情况下,您的问题的答案就在您的鼻子下方: Cannot read property 'toString' of undefined
local-storage-service.service.ts:43

您在代码的第 43 行调用 user.id.toString(),错误告诉您,您正在执行的代码正试图在...上调用 .toString()...嗯...一些未定义的东西,而某些东西是您的user.id!
在您不希望发生的 .toString() 调用之前,您的代码中可能会发生其他事情。

在任何情况下,您也可以通过简单地使用 if 语句来检查用户 ID 是否定义,或者更好的是,您可以使用所谓的optional chaining。这意味着您的代码将如下所示:user.id?.toString()。如果未定义用户 ID (undefined),则不会调用 .toString(),而 undefined 值将用于您的 setItem(...) 调用。

另外,你真的需要打电话给.toString()吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多