javascript - Meteor:从错误响应中获取数据?

标签 javascript json meteor

我有这个 Meteor 代码:

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] }

如何从 js 中的变量响应中获取 status (400)?

var errorStatus = SOME CODE HERE

最佳答案

有一个bug目前在 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;!

关于javascript - Meteor:从错误响应中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34494752/

相关文章:

java - 如何使用java将json对象转换为mongodb中的文档

javascript - 使用 JINT 从 javascript 文件读取 JSON 对象

java - 通过 angular 4 http post 连接到服务器端不允许的 java rest api

meteor - 使用 Meteor 进行 A/B 测试

javascript - meteor 发现不返回数据

javascript - React 和 Meteor "Uncaught TypeError: Cannot read property ' createElement' of undefined"

javascript - ( Node :8592) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): MongoParseError: Invalid connection string

javascript - 如何替换或更改 WordPress 模板上的单词?

javascript - 数组中数字序列的计数

javascript - 在没有 Javascript 的情况下嵌入 Twitter Feed