node.js - Angular JWT 配置文件用户(获取 json 字段)

标签 node.js mongodb angular jwt passport.js

我有一个 gettProfile() 方法,其中包含以下代码:

gettProfile(){
    var headers = new Headers();
    this.loadToken();
    headers.append('Authorization', this.authToken);
    headers.append('Content-Type','application/json');  
    let options = new RequestOptions({headers: headers});  
    return this.http.get('http://localhost:3000/api/profile', options)
      .map(res => res.json()); //res.json() localStorage.getItem('students')
  }

在这段代码中,当我编写 console.log(this.authToken); 它显示正确的 JWT token 。但是当我将此数据传递给我的 ProfileComponent 时,它说:

ERROR TypeError: Cannot read property 'name' of undefined

Profile.component.ts 代码如下:

  export class ProfileComponent implements OnInit {  
        students: Object;
          constructor(private authService:AuthService,  private router:Router) { }

          ngOnInit() {  
            this.authService.gettProfile().subscribe(profile => 
            {   
              this.students= profile.students;
            },
            err => {
              console.log(err);
              return false;    
            });
          }
}

Profile.component.html代码:

<div class="col-md-6 col-md-offset-3">
    <h1>Hi {{students.name}}!</h1>
    <p>You're logged in!!</p>
    <h3>Registered user detail:</h3>
    <ul>
        <li *ngIf="students">
            {{students.email}} ({{students.surname}} {{students.address}})
        </li>
    </ul>
    <p><a [routerLink]="['/login']">Logout</a></p>
</div>

当我查看 LocalStorage 时:

students:
{"id":"5960fa785017042b9c54f05c","name":"aaa","surname":"aaa","email":"aaa@gmail.com","address":"aaaa","phoneNumber":"aaaa"}
token: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwic2VsZWN0ZWQiOnt9LCJnZXR0ZXJzIjp7fSwiX2lkIjoiNTk2MGZhNzg1MDE3MDQyYjljNTRmMDVjIiwid2FzUG9wdWxhdGVkIjpmYWxzZFeiYWN0aXZlUGF0aHMiOnsicGF0aHMiOnsicGFzc3dvcmQiOiJpbml0IiwiZW1haWwiOiJpbml0IiwiX192IjoiaW5pdCIsInBob25lTnVtYmVyIjoiaW5pdCIsImFkZHJlc3MiOiJpbml0Iiwic3VybmFtZSI6ImluaXQiLCJuYW1lIjoiaW5pdCIsIl9pZCI6ImluaXQifSwic3RhdGVzIjp7Imlnbm9yZSI6e30sImRlZmF1bHQiOnt9LCJpbml0Ijp7Il9fdiI6dHJ1ZSwicGhvbmVOdW1iZXIiOnRydWUsImFkZHJlc3MiOnRydWUsInBhc3N3b3JkIjp0cnVlLCJlbWFpbCI6dHJ1ZSwic3VybmFtZSI6dHJ1ZSwibmFtZSI6dHJ1ZSwiX2lkIjp0cnVlfSwibW9kaWZ5Ijp7fSwicmVxdWlyZSI6e319LCJzdGF0ZU5hbWVzIjpbInJlcXVpcmUiLCJtb2RpZnkiLCJpbml0IiwiZGVmYXVsdCIsImlnbm9yZSJdfSwicGF0aHNUb1Njb3BlcyI6e30sImVtaXR0ZXIiOnsiZG9tYWluIjpudWxsLCJfZXZlbnRzIjp7fSwiX2V2ZW50c0NvdW50IjowLCJfbWF4TGlzdGVuZXJzIjowfX0sImlzTmV3IjpmYWxzZSwiX2RvYyI6eyJfX3YiOjAsInBob25lTnVtYmVyIjoiYWFhYSIsImFkZHJlc3MiOiJhYWFhIiwicGFzc3dvcmQiOiIkMmEkMTAkeDlGcTd1SlBIL3VHeUlEeUd3dnRwdUxlS0w2ZVFTTFpJRzRGVVBQQ2loOGg3RVNwZENPN08iLCJlbWFpbCI6ImFhYUBnbWFpbC5jb20iLCJzdXJuYW1lIjoiYWFhIiwibmFtZSI6ImFhYSIsIl9pZCI6IjU5NjBmYTc4NTAxNzA0MmI5YzU0ZjA1YyJ9LCIkaW5pdCI6dHJ1ZSwiaWF0IjoxNDk5NTI5NzA5LCJleHAiOjE1MDAxMzQ1MDl9.UEtThW_30lmPeIUCa8sIZtCfjtb4ek6qWxXyKpnWveI

我的注册和身份验证工作正常。但是配置文件不起作用。

我该如何处理这个问题?

最佳答案

当 angular 第一次尝试访问 students 时,它是未定义的,因为 getProfile 方法是异步的。所以你应该声明一个空的 Object 如下:

export class ProfileComponent implements OnInit {  
    students: Object = {};
    // rest of the code as it is

关于node.js - Angular JWT 配置文件用户(获取 json 字段),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44988462/

相关文章:

javascript - Socket.io-知道哪个房间的 socket 在哪

arrays - 使用 $addToSet Mongo 运算符添加多个值

mongodb - 如何配置 mongodb 在 docker 中运行以在 Windows 上使用外部驱动器

具有所选属性的 Angular 选择选项不起作用

angular - RXJS-BehaviorSubject : proper use of .值

javascript - this.students.splice(index,1) 在 UI 中没有改变 [Angular]

javascript - 如何从express\nodeJS中的post请求获取数据并在提交后将用户重定向到html文件

node.js - 有没有一种方法可以编写一个内部带有 promise 的Maybe.map?

javascript - PSD.js 字体颜色代码毫无意义

node.js - Mongoose 居住