Meteor

2016-04-07 36 views
2

'daki hatalı sunucu yanıtlarını ayrıştırma Şirket içi yapılan RESTful API'yi çağıran bir Meteor uygulaması geliştiriyoruz. Sunucumuz, "Content-type: application/json" başlığının ayarlandığını ve durum kodu ne olursa olsun her zaman aynı üstbilgiye (Content-Type: application/json; charset=UTF-8) ve JSON biçimli bir gövdeye yanıt vermesini bekler.Meteor

Birkaç örnek: Meteor In

# SERVER RESPONDED WITH 200: 
HTTP/1.1 200 OK 
Content-Length: 338 
Content-Type: application/json; charset=UTF-8 
Date: Thu, 07 Apr 2016 10:44:33 GMT 
Server: nginx 

{ 
    "result": "Hello, world!", 
    "status": "OK" 
} 


# RESPONSE WITH SOME ERRORS: 
HTTP/1.1 400 Bad Request 
Content-Length: 547 
Content-Type: application/json; charset=UTF-8 
Date: Thu, 07 Apr 2016 10:23:49 GMT 
Server: nginx 

{ 
    "errors": [ 
     { 
      "description": "error desc.", 
      "location": "error location", 
      "name": "error name" 
     } 
    ], 
    "status": "error" 
} 

, biz API çağırmak için böyle bir yöntem kullanmaktadır:

let url = 'https://server.url/path'; 
var auth = "user:pass"; 
var headers = {"Content-type": "application/json"}; 

let objId = 100; 
let report_type = 'some_type'; 
let data = { 
    object_id: objId, 
    report_type: report_type 
}; 
let payload = {auth, headers, data}; 
try { 
    var result = HTTP.post(url, payload); 
} catch (exc) { 
    console.log(exc); 
    return exc; 
} 
return result; 

sunucu 4xx/5xx hataları ile yanıt verdiğinde Buradaki sorun, exc olduğunu nesne uygun JSON biçimli bir nesne değil (bunu Meteor 1.2 ve 1.3 ile deniyoruz), ancak şu gibi görünüyor:

{ [Error: failed [400] {"errors": [{"description": "error desc.", "location": "error location", "name": error name"}], "status": "error"}] stack: [Getter] } 

200 yanıt durumunda, result uygun bir JSON nesnesidir ve sorun olmadan ayrıştırabiliriz.

Sunucu çağrımızı Meteor'ın zaman uyumsuz çağrısına değiştirmeye çalıştık ve bu durumda her şey yolunda giderse - hata nesnesinin headers ve content numaralarına erişebilir ve uygun şekilde ayrıştırabiliriz.

Soruma sorum: neden yanıt { [Error: failed [400] {"original_response": "here"}] stack: [Getter] } ile sarılmış ve bu durumda hatayı düzgün bir şekilde nasıl ayrıştırabiliriz? Hatalı bir yanıt aldığında Meteor'ın exc nesnesini düzgün bir şekilde yapılandırması için bir yere (sunucu veya Meteor uygulaması) bazı başlık eksik mi?

+0

Meteor bir hata atar ..., farklı bir şekilde istisna tamamlıyor 4xx/5xx yanıtı, sunucunuzun yanıtı hatanın içinde, hata dizesini ayrıştırabilir ve JSON verilerini alabilirsiniz. Belgeleri kontrol edin, bir async geri çağırma kullanarak hatayı atmıyor gibi görünüyor, o zaman belki sonuç alabilirsiniz: http://docs.meteor.com/#/full/http – ojovirtual

+0

Ah evet, bahsetmeyi unuttum async aramayı kullanmayı denedik, yazımı bu bilgilerle güncelleyeceğim :) – errata

cevap

1

Eh, benim durumumda, istisna nesne şimdi exc.response ile ulaşılabilir böylece görünüşte Meteor v1.3 bir olduğunda