与订户的Angular2响应映射

时间:2017-02-11 02:10:27

标签: angular typescript

在我的angular2应用程序中,我确实有authentication.service.tslogin.component.ts

authentication.service.ts

login(username: string, password: string) {
    return this.http.post('/auth/loginapp', JSON.stringify({ username: username, password: password }))
      .map((response: Response) => {
        // login successful if there's a jwt token in the response
        let user = response.json();
        //Printt the backend response to the console
        this.logger.debug('User '+ JSON.stringify(user));
        if (user && user.token) {
          // store user details and jwt token in local storage to keep user logged in between page refreshes
          localStorage.setItem('currentUser', JSON.stringify(user));
        }
      });
  }

authentication.service.ts调用后端身份验证服务并根据用户输入获取响应并保存到localStorage。

login.component.ts

this.authenticationService.login(this.model.username, this.model.password)
      .subscribe(
        data => {
          this.logger.debug("Login User"+ JSON.stringify(data))
          this.router.navigate(['register']);
        },
        error => {
          this.logger.error(error);
          this.alertService.error(error);
          this.loading = false;
        });

我始终在dataundefined获得login.component.ts。 authentication.service.ts正确获取响应。我需要将响应数据提供给login.component.ts。谁能告诉我代码的问题?

1 个答案:

答案 0 :(得分:2)

Observable map operator期待你回归一些东西,我相信你不会在那里归还任何东西。通常,您希望修改map operator中的数据。但在你的情况下,你不是。由于您在'流之外执行操作一种选择是使用.do operator

您可以使用do来代替......

.do((response: Response) => {
        let user = response.json();
        if (user && user.token) {
          localStorage.setItem('currentUser', JSON.stringify(user));
        }
});

如果您坚持使用地图,请确保它返回一些内容......

.map((response: Response) => {

        let user = response.json();
        if (user && user.token) {
          localStorage.setItem('currentUser', JSON.stringify(user));
        }
       return response;
});