2016-04-11 16 views
5

Tôi đã sử dụng các chiến lược xử lý lỗi http sử dụng trong tài liệu angular.io:lỗi đúng cách xử lý cho góc kết quả 2 http

getHeroes() { 
    return this.http.get(this._heroesUrl) 
        .map(res => <Hero[]> res.json().data) 
        .catch(this.handleError); 
    } 
    private handleError (error: Response) { 
     console.error(error); 
     return Observable.throw(error.json().error || 'Server error'); 
    } 
} 

Trong một số tình huống, thay vì một phản ứng JSON tôi sẽ nhận được 204 mã trạng thái (Không có dữ liệu). Trong trường hợp này, trình xử lý lỗi không được gọi cho đến khi không phân tích cú pháp kết quả qua res.json(), do đó lỗi được chuyển đến handleError là "error.json không phải là hàm".

Tôi có thể thẩm vấn luồng phản hồi để kiểm tra mã trạng thái 200 (OK) hoặc kiểu nội dung tiêu đề phản hồi của "application/json" và báo hiệu trình xử lý lỗi có thông báo lỗi có liên quan hơn không?

+0

Cảm ơn, tôi đã bỏ lỡ điều đó. Đối với bất kỳ ai khác đến điều này, xin lưu ý rằng hành vi xử lý lỗi vì alpha 47 chỉ áp dụng cho các mã trạng thái dưới 200 và cao hơn 299. Vì mã trạng thái của tôi là 204 (Không tìm thấy), tôi vẫn cần phải ném lỗi theo cách thủ công "alpha 46 trở xuống". – gxclarke

+0

Er, phản hồi HTTP 204 là "không có dữ liệu" ("không tìm thấy" là 404). –

+0

Có, xin lỗi tôi có nghĩa là "Không có dữ liệu". – gxclarke

Trả lời

8
http .get('Some Url') .map(res => { 
// If request fails, throw an Error that will be caught 
if(res.statu != 200) { 
throw new Error('This request has failed ' + res.status); } // If everything went fine, return the response 
else {return res.json(); 
} }) 

Điều này có thể giúp bạn.

Đây chỉ là để hiểu cách sử dụng trạng thái từ phản hồi, bạn có thể sửa đổi theo yêu cầu của mình.

Lỗi chỉ được ném cho mã không 200 kiểm tra này commit

Các vấn đề liên quan