'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?
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
Ah evet, bahsetmeyi unuttum async aramayı kullanmayı denedik, yazımı bu bilgilerle güncelleyeceğim :) – errata