我希望我们可以帮助我。我是离子框架的初学者。 我有一个带有restfull api服务器端的应用程序。我让一个休息提供者客户端与这个api进行交互:
在这个提供程序中,我有一个函数来处理每个请求中的错误。当状态代码为401时,我想发布一个事件“session:expired”,以便在我的app.component.ts中捕获它,将用户重定向到登录页面。
例如我的代码示例:
@Injectable()
export class RestProvider {
.......
myApiUrl = https://......
constructor(public http: HttpClient,
public loadingCtrl: LoadingController,
public loader: LoaderProvider,
public events: Events) {
}
/***
* API REST FOR USER WEBSERVICE
*/
getUsers(params=null): Observable<Student[]> {
return this.http.get(this.myApiUrl + "/users", { params: params, headers:this.customHeader })
.map(this.extractData)
.catch(this.handleError);
}
...........
private extractData(res: Response) {
console.log(res);
let body = res;
return body || { };
}
private handleError (error: Response | any) {
...
if(error.status == 401)
{
console.log("Status Error 401 : " + error.status);
this.events.publish('session:expired');
}
return ......
}
我的问题:handleError(或extractData)函数中的“this.event.publish”不起作用,在控制台中没有错误地破坏/冻结我的应用程序?
如果我在getUsers函数中发布了一个有效的事件(但没有兴趣):
getUsers(params=null): Observable<Student[]> {
this.events.publish('session:expired');
return this.http.get(this.myApiUrl + "/users", { params: params, headers:this.customHeader })
.map(this.extractData)
.catch(this.handleError);
}
是否可以在地图中发布事件或捕获http对象的功能?也许我没有“好的做法”?
提前感谢您,对不起我的英语:/