与订阅服务器的Angular2响应映射
在我的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((
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;
});
谢谢你,这很有效,我试过了,但没有。如果你有关于这方面的很好的教程,你能给我一个链接吗?也不确定为什么不起作用,但这里有一些文档:谢谢你,这起作用了,我试过了。但没有。如果你有关于这方面的好教程,你能给我一个链接吗?也不确定为什么不起作用,但这里有一些文档: