Angular 6 - Ionic - 使用拦截器中断 http 请求并返回 json

Posted

技术标签:

【中文标题】Angular 6 - Ionic - 使用拦截器中断 http 请求并返回 json【英文标题】:Angular 6 - Ionic - Break http request with interceptor and return json 【发布时间】:2018-12-06 13:31:49 【问题描述】:

如何使用 HttpInterceptor 中断 httpRequest 并返回数据(在本例中为 json)?

在我用于添加 http 标头的代码下方,如果调试为真,我想中断 http 请求并返回一个 JSON。

export class PostRequestInterceptor implements HttpInterceptor 

//FakeResponse is a class which return JSON data passing type
fakeResponse:FakeResponse = new FakeResponse();

debug:boolean = false;

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 

    if(this.debug)
        let jsonFakeResponse = this.fakeResponse.faker("ticket");
        // return the json jsonFakeResponse
    else
        const changedReq = req.clone(headers: req.headers.set('Content-Type', 'application/x-www-form-urlencoded'),withCredentials:true);
        return next.handle(changedReq);
    


我知道我应该返回一个 observable (ofc) 但是如何返回它已经解决了?

谢谢!

【问题讨论】:

【参考方案1】:

如果有人需要,我找到了解决方案。由于 Http 请求等待一个 HttpResponseEvent,我们必须创建一个对象 HttpResponseEvent 并解决它(通过一个 promise)。

export class PostRequestInterceptor implements HttpInterceptor 

//FakeResponse is a class which return JSON data passing type
fakeResponse:FakeResponse = new FakeResponse();

debug:boolean = true;

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 

    if(this.debug)



        //retrive jsonData from 
        let jsonDummyData = this.fakeResponse.select(req.body.params.Stmt);

        //Add header for content type
        const headers = new HttpHeaders();
        headers.set("Content-Type","application/json");

        return from(new Promise(resolve => 
            //wait 300 ms to simulate internet latency 
            setTimeout( () => 
                resolve(new HttpResponse(
                    body: jsonDummyData,
                    headers: headers
                ));
            ,300) 
        ));

    else
        const changedReq = req.clone(headers: req.headers.set('Content-Type', 'application/x-www-form-urlencoded'),withCredentials:true);
        return next.handle(changedReq);
    

 


删除 next.handle 语句将中断请求。

【讨论】:

以上是关于Angular 6 - Ionic - 使用拦截器中断 http 请求并返回 json的主要内容,如果未能解决你的问题,请参考以下文章

angular 6 ionic 4 默认组件未注册

Ionic 4 + Angular 6 PWA 样式不起作用/损坏

.NET 6 中带有 IONIC/Angular 的 CORS 问题

自定义组件未在 Ionic v4 + Angular 6 中显示

Json 输入 Ionic 3 和 Angular 6 意外结束

如何在离子 3 中使用角度 6?