2017-11-08 22 views
16

Tôi đang sử dụng Angular 4 HttpClient để gửi yêu cầu đến dịch vụ bên ngoài. Nó là một thiết lập rất chuẩn:Tôi nhận được "Phản hồi lỗi không thành công cho (url không xác định): 0 Lỗi không xác định" thay vì thông báo lỗi thực tế trong Angular

this.httpClient.get(url).subscribe(response => { //do something with response }, err => { console.log(err.message); },() => { console.log('completed'); }

Vấn đề là, khi yêu cầu không tôi nhìn thấy một generic Http failure response for (unknown url): 0 Unknown Error nhắn trong giao diện điều khiển. Trong khi đó, khi tôi kiểm tra yêu cầu không thành công trong chrome tôi có thể thấy trạng thái phản hồi là 422 và trong tab "xem trước" tôi thấy thông báo thực sự gây ra lỗi gây ra.

Làm cách nào để truy cập vào thư trả lời thực tế mà tôi có thể thấy trong công cụ chrome dev?

Dưới đây là một ảnh chụp màn hình thể hiện các vấn đề: enter image description here

+0

cố gắng ghi lại toàn bộ đối tượng 'err' - không chỉ là 'message' –

+0

Tôi đang đối mặt với cùng một vấn đề và sẽ tạo câu hỏi cho điều này, đây là đối tượng err hoàn chỉnh: https: //gist.github .com/GO3LIN/7cffc3b0aa1f24d3e23e28cc907237fc –

+0

Hoặc tốt hơn {"tiêu đề": {"normalizedNames": {}, "lazyUpdate": null, "tiêu đề": {}}, "trạng thái": 0, "statusText": "Lỗi không xác định", "url": null, "ok": false, "name": "HttpErrorResponse", "message": "Http response response (url không xác định): 0 Unknown Error", "error": {"isTrusted": true} } –

Trả lời

16

Vấn đề có liên quan đến CORS. Tôi nhận thấy có lỗi khác trong bảng điều khiển của Chrome:

Không có tiêu đề 'Access-Control-Allow-Origin' trên tài nguyên được yêu cầu. Do đó, nguồn gốc 'http://localhost:4200' không được phép truy cập. Câu trả lời đã có mã trạng thái HTTP 422.`

này có nghĩa là phản hồi từ máy chủ backend đã mất tích Access-Control-Allow-Origin tiêu đề mặc dù nginx backend được cấu hình để thêm những tiêu đề để các câu trả lời với add_header directive.

Tuy nhiên, chỉ thị này chỉ thêm tiêu đề khi mã phản hồi là 20X hoặc 30X. Khi trả lời lỗi các tiêu đề bị thiếu. Tôi cần phải dùng always tham số để đảm bảo tiêu đề được thêm không phụ thuộc vào mã phản hồi:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;

Khi phụ trợ đã được cấu hình một cách chính xác tôi có thể truy cập vào thông báo lỗi thực tế trong mã kiễu góc.

-1

Nếu bạn đang sử dụng Laravel như Backend của bạn, sau đó chỉnh sửa tập tin .htaccess của bạn bằng cách chỉ dán mã này, để giải quyết vấn đề Cros ở góc hoặc IONIC dự án

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT" 
+1

Bạn không bao giờ nên cho phép "*"! Nói chung bạn biết ai đang nói chuyện với phụ trợ của bạn và bạn nên đặt máy chủ của họ một cách rõ ràng. – itmuckel

0

của bạn Đối với tôi nó được gây ra bởi một máy chủ bên JsonSerializerException.

Một ngoại lệ unhandled đã xảy ra khi thực hiện yêu cầu Newtonsoft.Json.JsonSerializationException: Tự tham khảo vòng phát hiện với kiểu ...

Các khách hàng cho biết:

POST http://localhost:61495/api/Action net::ERR_INCOMPLETE_CHUNKED_ENCODING 
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …} 

Làm loại phản ứng đơn giản hơn giúp loại bỏ các vòng được giải quyết vấn đề.

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