我如何将从 http.post 返回的简单字符串值设置为 Angular5 中的变量
How can i set a simple string value returned from http.post to a variable in Angular5
我想使用 http.post 从我的 Restful 网络服务获取令牌。 Web 服务需要一个用户名和密码,如果参数与数据库中的任何用户匹配,它会创建一个令牌并将 return 作为字符串。我可以发送 post 并将值作为 JSON 但我想将其作为字符串。我想用它作为变量。而且我想清楚地了解 http 和 rest 服务通信,如果有人可以建议一个来源,那对我来说非常好。提前致谢...
我可以接受它,但我想把它作为一个变量或 class 中的一个变量
界面:
export interface Token {
token: string
}
auth.service.ts :
login (username: string, password: string): Observable<Token[]> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post<Token[]>(this.loginURL + this.params, null, httpOptions).do(data => console.log(data));
}
login.component.ts :
this.authService.login(this.username, this.password).subscribe(data => this.authService.token = data[0]);
更新和工作
我在@SrAxi 的帮助下解决了这个问题。最终正确代码;
我的 login.component.ts :
this.authService.login(this.username, this.password).subscribe(
(data: string) => this.authService.token.token = data,
(error: any) => console.error(error.message, error.details),() => console.log(this.authService.token.token)
);
我的auth.service.ts:
login(username: string, password: string): Observable<string> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post(this.loginURL + this.params, null, httpOptions)
.map((response: Token) => response.token) // we navigate in the repsonse directly and fish out the token and return it
.catch((error: any) => Observable.throw(error));
}
我的对象class:
export class Token {
private _token: string;
get token(): string {
return this._token;
}
set token(value: string) {
this._token = value;
}
}
您没有映射来自您的 Http 调用的响应。
login(username: string, password: string): Observable<string> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post(this.loginURL + this.params, null, httpOptions)
.map((response: any) => response.json().token) // we navigate in the repsonse directly and fish out the token and return it
.catch((error: any) => Observable.throw(error));
}
使用这个重新设计的函数,您将能够映射响应并将其解析为 JSON 或者抛出您的订阅将捕获的错误。
所以你可以这样称呼它:
this.authService.login(this.username, this.password).subscribe(
(data: any) => this.authService.token = data[0],
(error: any) => console.error(error.message, error.details)
);
在您的 auth-service 中执行以下操作
login (username: string, password: string): Observable<Token> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post(this.loginURL + this.params, null, httpOptions).map((res: Token) => res);
}
然后在你的login-component
...
token: Token = null;
this.authService.login(this.username, this.password)
.subscribe(token => this.token = token);
...
我想使用 http.post 从我的 Restful 网络服务获取令牌。 Web 服务需要一个用户名和密码,如果参数与数据库中的任何用户匹配,它会创建一个令牌并将 return 作为字符串。我可以发送 post 并将值作为 JSON 但我想将其作为字符串。我想用它作为变量。而且我想清楚地了解 http 和 rest 服务通信,如果有人可以建议一个来源,那对我来说非常好。提前致谢...
我可以接受它,但我想把它作为一个变量或 class 中的一个变量 界面:
export interface Token {
token: string
}
auth.service.ts :
login (username: string, password: string): Observable<Token[]> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post<Token[]>(this.loginURL + this.params, null, httpOptions).do(data => console.log(data));
}
login.component.ts :
this.authService.login(this.username, this.password).subscribe(data => this.authService.token = data[0]);
更新和工作
我在@SrAxi 的帮助下解决了这个问题。最终正确代码;
我的 login.component.ts :
this.authService.login(this.username, this.password).subscribe(
(data: string) => this.authService.token.token = data,
(error: any) => console.error(error.message, error.details),() => console.log(this.authService.token.token)
);
我的auth.service.ts:
login(username: string, password: string): Observable<string> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post(this.loginURL + this.params, null, httpOptions)
.map((response: Token) => response.token) // we navigate in the repsonse directly and fish out the token and return it
.catch((error: any) => Observable.throw(error));
}
我的对象class:
export class Token {
private _token: string;
get token(): string {
return this._token;
}
set token(value: string) {
this._token = value;
}
}
您没有映射来自您的 Http 调用的响应。
login(username: string, password: string): Observable<string> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post(this.loginURL + this.params, null, httpOptions)
.map((response: any) => response.json().token) // we navigate in the repsonse directly and fish out the token and return it
.catch((error: any) => Observable.throw(error));
}
使用这个重新设计的函数,您将能够映射响应并将其解析为 JSON 或者抛出您的订阅将捕获的错误。
所以你可以这样称呼它:
this.authService.login(this.username, this.password).subscribe(
(data: any) => this.authService.token = data[0],
(error: any) => console.error(error.message, error.details)
);
在您的 auth-service 中执行以下操作
login (username: string, password: string): Observable<Token> {
this.params = '?username=' + username + '&password=' + password;
return this.http.post(this.loginURL + this.params, null, httpOptions).map((res: Token) => res);
}
然后在你的login-component
...
token: Token = null;
this.authService.login(this.username, this.password)
.subscribe(token => this.token = token);
...