传递 firebase 令牌的 http 请求订阅错误

subscribe error on http request passing firebase token

正在尝试将 firebase 令牌传递给 nodejs api 并检索数据。我收到订阅错误:TSS2339:属性 'subscribe' 在类型 'void 上不存在。 用户配置文件数据存储在 mongoDB 集合中,可通过 api

访问

此代码在我的用户服务中有效

 public getCurrUser() {
    const baseUrl = 'http://localhost:3000'
    return this.http.get(baseUrl + '/userinfo').pipe(map((res) => {
      console.log(res);
      const userinfo = res;
      console.log('user docs: ', userinfo);
      return userinfo;
    }));

  }

这是服务中的代码,通过传递用户令牌包装:


    getUserData() {
        const baseUrl = 'http://localhost:3000'
        firebase.auth().currentUser.getIdToken()
          .then(authToken => {
            const headers = new HttpHeaders({'Authorization': authToken });
            return this.http.get(baseUrl + '/userinfo', {headers}).pipe(map((res) => {
              console.log('the results of getUserData : ', res);
              const userinfo = res;
              console.log('logged in user info: ', userinfo);

              return userinfo;
            }));
          });
    }

这是没有编译订阅错误的代码,它是从组件页面调用服务:


    public getCurrUserData() {

        this.userCurr = null;

        console.log('in user admin component - retrieval of curr user')
        this.userAdminService.getUserData()
          .subscribe(
            (userCurr: UserProfileModel[]) => {
              this.userCurr = userCurr;
              console.log('loading current user: ', this.userCurr);
            }

          );

      }

这似乎与返回一个可观察对象有关,但我无法解决问题。任何帮助将不胜感激

getUserData() 不是 return 立即可以订阅的可观察对象,因此会出现错误。它首先有一个承诺,当解决时比 return 一个可观察的但 this.userAdminService.getUserData().subscribe() 期望一个由 getUserData() 编辑的可观察的 return。

您可以尝试将可观察对象转换为丢失实时更改的承诺,或者您可以这样做:

getUserData(authToken) {
    const baseUrl = 'http://localhost:3000'
    const headers = new HttpHeaders({'Authorization': authToken });
    return this.http.get(baseUrl + '/userinfo', {headers}).pipe(map((res) => {
        console.log('the results of getUserData : ', res);
        const userinfo = res;
        console.log('logged in user info: ', userinfo);

        return userinfo;
    }));
}

public getCurrUserData() {
    this.userCurr = null;

    console.log('in user admin component - retrieval of curr user');
    firebase.auth().currentUser.getIdToken()
        .then(authToken => {    
            this.userAdminService.getUserData(authToken )
            .subscribe((userCurr: UserProfileModel[]) => {
                this.userCurr = userCurr;
                console.log('loading current user: ', this.userCurr);
            }
        );
    });
}