2016-09-20 15 views
5

này được liên quan đến phản ứng máy chủ xử lý trong angular2
Như tôi hiểu,
1. máy chủ đáp ứng mã 200, 201 vv sẽ làm cho phản ứng thành công
2. trong khi phản hồi của máy chủ 400, 401, 500 v.v. sẽ trả lời lỗi
3. nếu phản hồi thành công, nó sẽ goto ánh xạ chức năng, từ đó chúng ta có thể trả về dữ liệu hoặc sửa đổi nó. 4. nếu đáp ứng là lỗi, sau đó nó sẽ đi đến chức năng bắt, từ đó chúng tôi sẽ có thể trở lại quan sát hoặc ném quan sát được.xử lý phản ứng lỗi máy chủ cùng với dữ liệu trong góc 2 sử dụng HTTP thể quan sát được

Câu hỏi của tôi là nếu máy chủ trả về mã phản hồi lỗi cùng với dữ liệu lỗi, thì làm cách nào để nắm bắt dữ liệu đó.

tức là giả sử tôi đang gửi dưới đây dữ liệu từ máy chủ
phản ứng thành công
status: 200
msg: "LOGGEDIN thành công"

phản ứng lỗi
status: 400
msg: "userid và mật khẩu sai"

Đây tôi là ble để có được hoặc xử lý dữ liệu thành công nhưng không phải là dữ liệu lỗi, bởi vì trong chức năng bắt, chỉ có đối tượng lỗi là nhận được thông qua và rằng đối tượng lỗi chỉ chứa mã phản hồi từ máy chủ, không phải là dữ liệu đáp ứng

return this.http.get('/login') 
         .map((res: Response) => res.json().data) 
         .catch((error: any) => { 
          return Observable.throw(new Error("error occured"+error.status)); 

         }) 

Trả lời

4

Cập nhật:

không trả lại bản đồ và chức năng bắt.
Dưới đây là cập nhật mã

return this.http.get('/login') 
       .map((successRes: Response) => { 
         res.json().data 
        )} 
       .catch((errorRes: Response) => { 
        Observable.throw(errorRes.json().data); 
       }) 


gốc:

Thực ra giải pháp được rất đơn giản, dữ liệu phản ứng tự nó được gắn liền với số đầu tiên, giống như phản ứng bình thường của nó như trong trường hợp của thành công phản ứng.

Chỉ cần thêm json() để gọi đối tượng lỗi phản hồi để chuyển đổi đối tượng json thành js, như thế này.

return this.http.get('/login') 
       .map((successRes: Response) => { 
         return res.json().data 
        )} 
       .catch((errorRes: Response) => { 
        return Observable.throw(errorRes.json().data); 
       }) 
+1

tiếc là không có "một cái gì đó như thế này" - 'errorRes.json()' - cho phản ứng lỗi –

2

Bạn không phải .catch() nó!

Nếu máy chủ của bạn gửi tin nhắn chính xác, chỉ cần đăng ký mà có thể quan sát!

yourLoginService.LogInFunction().subscribe(
    successData => console.log(successData), 
    errData => console.log(errData) 
); 
+0

Thật sự tôi phải gọi lúc 2 place..1st từ lớp thành phần để phục vụ class..2nd từ dịch vụ lớp để http .. này được áp dụng cho trường hợp 1 kịch bản và im sử dụng cùng một cách như u đã đề cập trong phương pháp dịch vụ của tôi gọi .. nhưng trong cuộc gọi phương pháp http tôi đã phải sử dụng bản đồ và phương pháp bắt ... – Vikash

+0

Chắc chắn bạn có thể để nó quá trong dịch vụ của bạn .. Sau đó xin vui lòng làm rõ vấn đề của bạn. :) – mxii

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