我有一个自定义的http服务,该服务将访问令牌附加到每个请求,我想使用ionic2存储值的访问令牌
这是我前两个问题的代码
所以在 httpclient 服务中,我有
@Injectable()
export class HttpClient {
authtoken: string;
storage: Storage;
constructor(private http: Http, storage: Storage, private _authService:Authservice) {
this._authService.tokenEvent.subscribe(res => { //subscribing to token event in authservice
if (res) {
this.storage.get('token')
.then(token => {
this.authtoken = token
});
}
})
}
get(url){
let headers = new Headers();
this.createGeneralHeaders(headers);
return Observable
.flatMap( //retuns an error flatmap doesnt exist on observable
name => this.http.get(`${url}?access-token=${this.authtoken}`, {headers})
);
}
在设置令牌的身份验证服务中
tokenEvent: Subject<any> = new BehaviorSubject(null);
login(user: UserModel): Observable<any> {
return this._http.post(this.loginurl + "mobile-login", body)
.map((response: Response) => {
let token = response.json().access_token;
if (token) {
this.storage.set('token', token).then(res => this.tokenEvent.next(true));
return true;
}
})
//.catch(this.handleError);
}
现在我可以轻松地在任何 http 请求中使用来自第一个服务的获取,例如
getChecklists(truckid): Observable<any> {
return this._httpclient.get(this.inspectionurl + "get-checklists")
.map(res=>res.json().data)
}
上面的第一个服务重新调整平面图不存在的错误。如何调整要在另一个 http 请求中使用的第一个服务,并从令牌事件附加令牌
这两个解决方案基于这个问题和这个问题
我认为你在这里不需要平面图,请参阅此链接:
http://reactivex.io/documentation/operators/flatmap.html
只有当你的响应是可观察的并且你想合并流时,你才会使用它,我认为这不是你在这里的目标。
因此,您在 HttpClient 上的"get"函数将变为:
get(url){
let headers = new Headers();
this.createGeneralHeaders(headers);
return this.http.get(`${url}?access-token=${this.authtoken}`, {headers});
}