Angular API响应始终为0

时间:2018-10-08 18:58:07

标签: angular6

我正在使用Angular6。我想处理错误响应代码。如果不是400,则意味着我需要重定向到其他页面。

在这里,我面临两个问题。

第一个,我无法获得错误响应代码。它始终仅返回零(0)。

第二个,如果我得到的响应码不是400,则无法重定向到另一页。

下面我粘贴了我正在使用的代码。

import { Injectable } from '@angular/core';
import { Http, Response, RequestOptions, Headers, Request, RequestMethod, URLSearchParams, ResponseContentType } from '@angular/http';
import { BehaviorSubject, ReplaySubject } from 'rxjs';
import { Observable } from 'rxjs';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/empty';
import { environment } from '../../environments/environment';
import { JwtService } from './jwt.service';
import { Router } from '@angular/router';

@Injectable()
export class CallapiService {

    private api_base_url: string = '';
    private default_api_key: string = '';
    private key: string = '';
    private host: string = '';
    private system: string = '';


    constructor(private http: Http, private jwtService: JwtService, private router: Router) {
        this.api_base_url = environment.api_end_point;
        this.host = environment.base_url;
        this.system = environment.system;
    }

    private contains(a, obj) {
        var i = a.length;
        while (i--) {
            if (a[i] === obj) {
                return true;
            }
        }
        return false;
    }

    private setHeaders(headers: Object = {}): Headers {
        headers['Accept'] = 'application/json';
        headers['Content-Type'] = 'application/json';
        headers['Access-Control-Allow-Origin'] = '*';
        headers['Access-Control-Allow-Methods'] = 'GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS';

        if (this.jwtService.getToken()) {
            headers['Authorization'] = `Bearer ${this.jwtService.getToken()}`;
        }
        return new Headers(headers);
    }

    private formatErrors(error: any) {
        console.log(error);
        if (error.status != 400) {
            this.router.navigate(['users/login']);
            return Observable.empty();
        }
        if (error.status == 401) {
            localStorage.clear();
            window.location.reload();
        }
        return Observable.throw(error.json());
    }

    get(path: string, params: URLSearchParams = new URLSearchParams()): Observable<any> {
        return this.http.get(`${environment.base_url}${path}`, { headers: this.setHeaders({}), search: params })
            .catch(this.formatErrors)
            .map(this.extractData);
    }

    public extractData(res: Response) {
        try {
            return res.json();
        } catch (e) {
            return {};
        }
    }

}

请帮助我解决此问题。

0 个答案:

没有答案