簡體   English   中英

流星:從錯誤響應中獲取數據?

[英]Meteor: Get data from error response?

我有這個流星代碼:

Meteor.methods({
  'addEmailToList': function(email){

    var mailChimpCall = Meteor.wrapAsync(HTTP.call);

    try {
    var result = mailChimpCall( 'POST', 'https://us10.api.mailchimp.com/3.0/lists/yyy/members/', {
      auth: 'xxx',
      header: 'content-type: application/json',
      data: {"email_address":email, "status":"subscribed"}
    });
  } catch(error){
    console.log(error);
    throw new Meteor.Error("Bad result: ", "It was an error when posting");
  }

  return result

  }
});

結果如下:

{ [Error: failed [400] {"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Member Exists","status":400,"detail":"jeff@jeff.com is already a list member.  Use PUT to insert or update list members.","instance":""}] stack: [Getter] }

如何從該響應獲取status (400)到js中的變量?

var errorStatus = SOME CODE HERE

您需要找到如何從響應中獲取適當的錯誤對象,該對象是:

{
    "type": "http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/",
    "title": "Member Exists",
    "status": 400,
    "detail": "jeff@jeff.com is already a list member.  Use PUT to insert or update list members.",
    "instance": ""
}

之后,您可以使用status屬性獲取錯誤代碼。

另外,盡管不建議這樣做,但是您可以使用Regex解析所獲得的整個字符串,並在其中獲取數字[Error: failed [XXXX]

目前,Meteor.wrapAsync中存在一個錯誤 ,因此發出錯誤消息有些痛苦。 最好提出一種解決問題的新方法。 此解決方法的全部功勞歸於github / meteor論壇用戶@faceyspacey。

var Future = Npm.require( 'fibers/future' );

Meteor.makeAsync = function(fn, context) {
  return function (/* arguments */) {
    var self = context || this;
    var newArgs = _.toArray(arguments);
    var callback;
    for (var i = newArgs.length - 1; i >= 0; --i) {
      var arg = newArgs[i];
      var type = typeof arg;
      if (type !== "undefined") {
        if (type === "function") {
          callback = arg;
        }
        break;
      }
    }
    if(!callback) {
      var fut = new Future();
            callback = function(error, data) {
               fut.return({error:  error, data: data});
            };
      ++i; 
    }
    newArgs[i] = Meteor.bindEnvironment(callback);
    var result = fn.apply(self, newArgs);
    return fut ? fut.wait() : result;
  };
};

將其放置在例如server/lib/makeAsync.js類的位置,並像Meteor.wrapAsync一樣使用它,但要注意,這將返回帶有錯誤和數據鍵的對象,而不是拋出錯誤。 因此,將現有的try / catch替換為if (response.error)以獲取錯誤,並且var statusCode = response.data.statusCode;

這是無效的JSON,但您可以使用正則表達式獲取該數字:

 var response = '{ [Error: failed [400] {"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Member Exists","status":400,"detail":"jeff@jeff.com is already a list member. Use PUT to insert or update list members.","instance":""}] stack: [Getter] }'; alert(response.match(/\\[([0-9]+)\\]/)[1]); 

您可以使用jquery或Javascript獲得。 首先,您必須將響應轉換為有效的JSON字符串。 然后應用以下方法之一。

使用jQuery

  var jsonString = '{"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Member Exists","status":400,"detail":"jeff@jeff.com is already a list member.  Use PUT to insert or update list members.","instance":""}'
    var jsonObject = $.parseJSON(jsonString);
    var errorStatus = jsonObject ['status'];

使用JavaScript

var jsonString = '{"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Member Exists","status":400,"detail":"jeff@jeff.com is already a list member.  Use PUT to insert or update list members.","instance":""}'
    var jsonObject  = JSON.parse(jsonString);
    var errorStatus = jsonObject ['status'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM