Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与订阅服务器的Angular2响应映射_Angular_Typescript - Fatal编程技术网

与订阅服务器的Angular2响应映射

与订阅服务器的Angular2响应映射,angular,typescript,Angular,Typescript,在我的angular2应用程序中,我有authentication.service.ts和login.component.ts authentication.service.ts login(username: string, password: string) { return this.http.post('/auth/loginapp', JSON.stringify({ username: username, password: password })) .map((

在我的angular2应用程序中,我有
authentication.service.ts
login.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));
        }
      });
  }
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;
        });
authentication.service.ts调用后端身份验证服务,根据用户输入获取响应并保存到localStorage

login.component.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));
        }
      });
  }
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;
        });

我总是在
login.component.ts
中以
未定义的
形式获取
数据。authentication.service.ts正确获取响应。我需要获取login.component.ts的响应数据。有人能告诉我我的代码有什么问题吗?

可观察的
映射操作符
希望你返回一些东西,我相信你没有返回任何东西。通常,您需要在
映射操作符中修改数据。但在你的情况下,你不是。由于您在“流”之外执行操作,因此一个选项是使用
.do操作符

你可以用do来代替

.do((response: Response) => {
        let user = response.json();
        if (user && user.token) {
          localStorage.setItem('currentUser', JSON.stringify(user));
        }
});
如果您坚持使用map,请确保它返回一些内容

.map((response: Response) => {

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

可观察的
map操作符
期望您返回一些东西,我相信您没有返回任何东西。通常,您需要在
映射操作符中修改数据。但在你的情况下,你不是。由于您在“流”之外执行操作,因此一个选项是使用
.do操作符

你可以用do来代替

.do((response: Response) => {
        let user = response.json();
        if (user && user.token) {
          localStorage.setItem('currentUser', JSON.stringify(user));
        }
});
如果您坚持使用map,请确保它返回一些内容

.map((response: Response) => {

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

谢谢你,这很有效,我试过了,但没有。如果你有关于这方面的很好的教程,你能给我一个链接吗?也不确定为什么不起作用,但这里有一些文档:谢谢你,这起作用了,我试过了。但没有。如果你有关于这方面的好教程,你能给我一个链接吗?也不确定为什么不起作用,但这里有一些文档: