我正在运行下面的代码,允许用户登录系统。作为此功能的一部分,正在使用 HTTP POST(返回 Observable)。由于这是使用 JWT,因此我必须提取 TOKEN 中的值。
我想以 JSON 格式将 Observable(带有这些 TOKEN 值)返回给调用程序。我尝试使用 map 功能如下:
adminLogin(username, password) {
let url = `${this._apiRoot}/login`;
let tokenResp = {};
this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })
.map(response => response.json())
.subscribe((response: HttpResponse<any>) => {
[ ... snip ...]
但我的经验是“订阅”永远不会被调用。
我能做什么?
TIA
原始代码
adminLogin(username, password) {
let url = `${this._apiRoot}/login`;
let tokenResp = {};
this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })
.subscribe((response: HttpResponse<any>) => {
let token = response.headers.get("Authorization");
if (token) {
let t = JWT(token);
console.log("-- what is in the token --");
console.log(t);
// need to set the value here
this.userLoggedIn.next(setUser);
}
},
(error: HttpErrorResponse) => {
if (error.error instanceof Error) {
let errorFound = console.error(error.status + " "
+ error.error.message + " " + error.message );
console.error(errorFound);
return Observable.throw(errorFound);
}
else {
let errorFound = "Server-Side Error has taken place ";
console.error(errorFound);
return Observable.throw(new Error(errorFound));
}
});
}
最佳答案
如果你想用 Token 返回一个 observable(无论什么类型),你不能将你的 subscribe 方法参数类型设置为 HttpResponse。我以为你会得到 ts 编译错误
试试这个
adminLogin(username, password) : Observable<JWT> //Assuming this is a type
this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })
.map((response: HttpResponse<any>) => {
let token = response.headers.get("Authorization");
if (token) {
let t = JWT(token);
return t;
}
return null; //Or error
},
//Error handling
并在调用方法中
adminLogin(username,password).subscribe((token: JWT )=>
{
//use token
}
关于javascript - 无法将 JSON 对象返回给调用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800902/