angular4 关于拦截器的问题
最近非常头痛的一件事,就是拦截器。
- 拦截器是要用HttpClientModule,才能玩转的。但是!!!我的项目用的是HttpModule来做请求的。一个是constructor(protected http: HttpClient,) {}, 一个是constructor(protected http: Http,) {}
项目都开始上线使用了,还比较大,想改已经很麻烦了。
现在的http请求封装和调用是这样的:
http.service.ts
/**
* 使用POST方法对指定URL发送指定的参数
*
* @param url
* @param criteria 发送的参数对象
*/
postWithCriteria(url, criteria) {
// 这里应该要有一个判断条件的:判断当前的url是不是需要token,比如:login...
return this.http.post(url, this.encode(criteria || {})).map(r => {
const tmp = r.json();
console.log('响应:', tmp);
if (typeof tmp.data === 'string') {
tmp.data = JSON.parse(tmp.data);
}
return tmp;
});
}
/**
* @param url 网址
* @param criteria 请求参数
* @param cls 响应类
* */
post(url, criteria = null, cls = null) {
return this.postWithCriteria(url, criteria || {}).map((data: ResponseMessageModel) => {
if (data.resultType && cls) {
if (Array.isArray(data.data)) {
data.data = data.data.map(item => {
return new cls(item);
});
} else if (Array.isArray(data.data.Rows)) {
data.data.Rows = data.data.Rows.map(item => {
return new cls(item);
});
} else if (typeof(data.data) === 'object') {
data.data = new cls(data.data);
}
}
this.timeManagerService.setTimestamp(data.timeStamp);
return data;
});
}
一般调用是这样的:
/**
* 从服务器获取错误码
* */
loadError() {
this.httpService.post(environment.url.getErrors, {
clientType: 'OperationMgt',
errorType: 'InputError'
}).subscribe(
data => {
if (data.resultType) {
this.errorService.errors = data.data;
} else {
this.errorService.handlePopupErrors(data.error);
}
}
);
}
就想问一下各位大佬:
a. 有没有办法能正常将Http的使用改成HttpClient的,按照官方文档的来走,直接在一般调用的地方就会报很多错,甚至subscribe这个都用不了。
b. 或者,还有没有别的办法可以实现类似于拦截器的功能,目前就是想拦截获取到400,502等以及超时的请求问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个没办法,升级到Angular5.0以上之后Http就被标记为过时,没法用了,所以你还是尽快把Http全部换成HttpClient,报错是好事,你很容易知道哪些地方需要修改,改动一般都很小,很容易改。