Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTTPInterceptor未在Angular 8应用程序中拦截来自第三方小部件的http请求_Javascript_Angular_Axios_Angular Http Interceptors - Fatal编程技术网

Javascript HTTPInterceptor未在Angular 8应用程序中拦截来自第三方小部件的http请求

Javascript HTTPInterceptor未在Angular 8应用程序中拦截来自第三方小部件的http请求,javascript,angular,axios,angular-http-interceptors,Javascript,Angular,Axios,Angular Http Interceptors,我有一个Angular 8应用程序,它有一个HTTP拦截器。在我的应用程序中,我在我的应用程序的UI中使用了一个第三方UI小部件(作为依赖项从npm注册表获得)。当这个小部件嵌入到我的应用程序的UI中时,会使用axios模块进行GET调用。现在,我注意到小部件发出的HTTP GET调用没有被我拥有的HTTP拦截器截获。来自我的应用程序的其他HTTP请求正在被拦截,确认我的拦截器正常工作。你能帮我拦截小部件发出的GET调用吗 以下是我拥有的拦截器: import { Injectable } fr

我有一个Angular 8应用程序,它有一个HTTP拦截器。在我的应用程序中,我在我的应用程序的UI中使用了一个第三方UI小部件(作为依赖项从npm注册表获得)。当这个小部件嵌入到我的应用程序的UI中时,会使用axios模块进行GET调用。现在,我注意到小部件发出的HTTP GET调用没有被我拥有的HTTP拦截器截获。来自我的应用程序的其他HTTP请求正在被拦截,确认我的拦截器正常工作。你能帮我拦截小部件发出的GET调用吗

以下是我拥有的拦截器:

import { Injectable } from "@angular/core";
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from "@angular/common/http";
import { Observable } from "rxjs";
import { LoaderService } from './loader.service';
import { finalize } from "rxjs/operators";


@Injectable()
export class LoaderInterceptor implements HttpInterceptor {

   

    constructor(private loaderService: LoaderService) {
    }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (displayLoadingScreen) {

            return next.handle(request).pipe(
                finalize(() => {
                    this.activeRequests--;
                })
            )
        } else {
            return next.handle(request);
        }
    };
}
从“@angular/core”导入{Injectable};
从“@angular/common/http”导入{HttpEvent,HttpHandler,HttpInterceptor,HttpRequest};
从“rxjs”导入{observeable};
从“/loader.service”导入{LoaderService};
从“rxjs/operators”导入{finalize};
@可注射()
导出类LoaderInterceptor实现HttpInterceptor{
构造函数(专用loaderService:loaderService){
}
拦截(请求:HttpRequest,下一步:HttpHandler):可观察{
如果(显示加载屏幕){
返回next.handle(request.pipe)(
完成(()=>{
这个.activeRequests--;
})
)
}否则{
下一步返回。处理(请求);
}
};
}

HttpInterceptor
将仅在Angular的
HttpClient
上工作(以及它的根实例,可能有其他
HttpClient

如果他们正在使用Axios进行调用,您的侦听器将无法访问,因为它没有使用您的
HttpClient

注意:Axios是它自己添加拦截器的方式。您可能仍然无法访问您的第三方库正在使用的Axios实例

以下是axios文档中的拦截器示例

//添加请求拦截器
axios.interceptors.request.use(函数(配置){
//在发送请求之前做些什么
返回配置;
},函数(错误){
//处理请求错误
返回承诺。拒绝(错误);
});
//添加一个响应拦截器
axios.interceptors.response.use(函数(响应){
//在2xx范围内的任何状态代码都会触发此功能
//处理响应数据
返回响应;
},函数(错误){
//任何超出2xx范围的状态代码都会触发此功能
//处理响应错误
返回承诺。拒绝(错误);
});

我没有使用HTTPInterceptor就解决了这个问题(因为interceptor无法工作)。感谢angular的回复,例如,如果我们使用angular HttpInterceptor,我们将把它注入app.module.ts文件中的提供者中,这样拦截器将正常工作。如果我们使用axios,我们需要如何通知angular应用程序我们正在使用axios?