返回流星呼叫方法

时间:2015-02-16 20:54:52

标签: javascript node.js meteor

我今天第一次与Meteor合作:)

我创建了一个简单的表单,向Ruby API发出POST请求以返回auth_code

Meteor.call("serverEx", emailInput, passwordInput)效果很好,并在Meteor服务器中显示成功返回。

所以我的问题是,我试图将该auth_code返回到流星客户端中的变量

console.log(finalVar)无效,显示未定义。

有什么想法吗?有一种感觉,我错过了一些非常基本的东西。

if (Meteor.isClient) {

  Template.templateLogin.events({
    'submit form': function(event) {

      var emailInput = event.target.email.value;
      var passwordInput = event.target.password.value;

      var finalVar = Meteor.call("serverEx", emailInput, passwordInput);

      console.log(finalVar);

      return false;
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });

  /////////////////////
  // METHODS
  /////////////////////
  Meteor.methods({

    "serverEx" : function(a, b) {

       var httpMethod = "POST";
       var httpUrl = "http://xxxxxxx.herokuapp.com/signin";

       HTTP.call(httpMethod, httpUrl, {'content-type': 'application/json; charset=utf-8', params: {
         email: a,
         password: b
       }}, function (error, result) {
         if (result.statusCode === 200) {
             console.log("Success, the authcode is " + result.data.auth_token);
             return result.data.auth_token;
         }
         if (result.statusCode === 401) {
           console.log("Login failed, invalided email or password");
         }
      });
    }

  });

}

2 个答案:

答案 0 :(得分:1)

尝试使用回调选项。

 var finalVar;
     Meteor.call("serverEx", emailInput, passwordInput,function(err,result){
         if(!err){
              finalVar = result;
          }
      });      
          console.log(finalVar);

答案 1 :(得分:1)

我认为你遇到的问题是同步。通常,我会使用Meteor.call回调函数调用此类方法:

Meteor.call("serverEx", emailInput, passwordInput, function(error, result){
    if (error)
       alert(error.reason)
    else
       finalVar = result;
});

此外,您似乎没有从服务器端方法返回任何内容。试试这个。

"serverEx" : function(a, b) {

   var httpMethod = "POST";
   var httpUrl = "http://xxxxxxx.herokuapp.com/signin";
   var httpResult;


   HTTP.call(httpMethod, httpUrl, {'content-type': 'application/json; charset=utf-8', params: {
     email: a,
     password: b
   }}, function (error, result) {
     if (result.statusCode === 200) {
         console.log("Success, the authcode is " + result.data.auth_token);
         httpResult = result.data.auth_token;
     }
     if (result.statusCode === 401) {
       console.log("Login failed, invalided email or password");
     }
  });

  return httpResult;
}