Angular 6 - Ionic - разорвать http запрос с перехватчиком и вернуть json - PullRequest
0 голосов
/ 27 июня 2018

Как прервать httpRequest и вернуть данные (в данном случае json), используя HttpInterceptor?

Ниже кода, который я использую для добавления заголовка http, я хотел бы, чтобы при отладке было установлено значение true, прерывать запрос 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);
    }

}

}

Я знаю, что должен вернуть наблюдаемое (ofc), но как вернуть его, уже решенное?

Спасибо!

1 Ответ

0 голосов
/ 28 июня 2018

Я нашел решение, если оно кому-нибудь нужно. Поскольку запрос Http ожидает HttpResponseEvent, мы должны создать объект HttpResponseEvent и разрешить его (с обещанием).

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 прервет запрос.

...