Javascript 在Meteor中解析错误的服务器响应
我们正在开发一个Meteor应用程序,它调用内部制作的RESTful API。我们的服务器希望设置Javascript 在Meteor中解析错误的服务器响应,javascript,json,meteor,httprequest,httpexception,Javascript,Json,Meteor,Httprequest,Httpexception,我们正在开发一个Meteor应用程序,它调用内部制作的RESTful API。我们的服务器希望设置“Content-type:application/json”头,它总是使用相同的头(Content-type:application/json;charset=UTF-8)和json格式的主体进行响应,而不管状态代码如何 几个例子: # SERVER RESPONDED WITH 200: HTTP/1.1 200 OK Content-Length: 338 Content-Type: appl
“Content-type:application/json”
头,它总是使用相同的头(Content-type:application/json;charset=UTF-8
)和json格式的主体进行响应,而不管状态代码如何
几个例子:
# 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"
}
在Meteor中,我们使用如下方法调用API:
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;
这里的问题是,当服务器响应4xx/5xx错误时,exc
对象不是一个正确的JSON格式的对象(我们正在Meteor 1.2和1.3中尝试这一点),但它看起来是这样的:
{ [Error: failed [400] {"errors": [{"description": "error desc.", "location": "error location", "name": error name"}], "status": "error"}] stack: [Getter] }
在200响应的情况下,结果
是一个合适的JSON对象,我们可以毫无问题地解析它
我们试图将我们的服务器调用更改为Meteor的异步调用,在这种情况下,一切正常-我们可以访问错误对象的标题和内容,并正确解析它
我的问题是:为什么响应围绕着{[Error:failed[400]{“original_response”:“here”}]stack:[Getter]}
,在这种情况下如何正确解析错误?我们是否在某个地方(服务器或Meteor应用程序)丢失了一些头,以便Meteor在得到错误响应时正确构造exc
对象?显然Meteor v1.3以不同的方式包装异常,因此在我的情况下,异常中的对象可以通过exc.response
now…Meteor在出现4xx/5xx响应时抛出错误,您的服务器响应在错误中,您可以解析错误字符串并获取JSON数据。查看文档,似乎使用异步回调不会引发错误,然后您可能会得到结果:啊,是的,我忘了提到我们尝试使用异步调用,我将用以下信息更新我的帖子:)