Mul*_*tut 28 angular-http-interceptors angular
我创建了这个HTTPInterceptor以便能够更好地处理http错误,它在我执行git pull并运行npm install之前运行良好.
这是我的代码:
import {Injectable} from '@angular/core';
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse} from '@angular/common/http';
import {Observable} from "rxjs";
import {ToasterService} from "angular2-toaster";
@Injectable()
export class GobaeInterceptor implements HttpInterceptor {
constructor(private toasterService: ToasterService){
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.do(event => {
if (event instanceof HttpResponse) {
let response = event.body;
if(response.Error){
this.toasterService.pop('error', 'Error '+response.Code, response.Message);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
TypeError:next.handle(...).do不是GobaeInterceptor.webpackJsonp中的函数.../../../../../src/app/services/gobae.interceptor.ts.GobaeInterceptor.拦截(gobae.interceptor.ts:12)在HttpInterceptorHandler.webpackJsonp .../../../common/@angular/common/http.es5.js.HttpInterceptorHandler.handle(
最近有什么可以影响我的代码的东西改变了吗?我现在可以做什么来"捕获"拦截器上的http响应?
小智 52
抛出此错误是因为您缺少do运算符.下面导入使用do运算符修补可观察对象.
import 'rxjs/add/operator/do';
Run Code Online (Sandbox Code Playgroud)
默认情况下,RxJs不会捆绑所有运算符函数以减小库大小.您需要导入要单独使用的运算符.
Sha*_*mer 19
rxjs 6/angular 6将需要管道
return next.handle(req).pipe(
tap(event => {
if (event instanceof HttpResponse) {
...
}
})
);
Run Code Online (Sandbox Code Playgroud)
小智 8
你必须使用导入.
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/Observable';
import 'rxjs/add/observable/throw';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17823 次 |
| 最近记录: |