2015-02-16 2 views
0

мой первый раз с Метеор сегодня :)Возвращение метод метеор вызова

я сделал простую форму, которая делает запрос POST к рубиновой API, чтобы вернуть 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"); 
     } 
     }); 
    } 

    }); 

} 
+0

Вы заставляли его работать? – Ethaan

+0

Я пробовал обратный вызов точно так же, как показано ниже, все еще возвращающийся неопределенный. –

+0

Похоже, мне нужно отложить вызов метода до тех пор, пока я не получу полный ответ от отправки формы? Что-то вроде wrapAsync, но я не могу понять, как его обернуть? Любые советы –

ответ

1

Возможно, с возможностью обратного вызова.

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

ах ты избил меня! –

+1

@RamsayLanier ahah = p – Ethaan

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; 
} 
+0

Посмотреть мой комментарий. –

+0

обновил мой ответ - если это не сработает, попробуйте не использовать обратный вызов в HTTP.call на стороне сервера и напрямую настроить httpResult на результат вызова. –

+0

Единственная проблема заключается в том, что клиент возвращает значение, прежде чем сервер сможет завершить ответ. Если я попробовал обратный вызов в http.call, где я должен поместить функцию? –

Смежные вопросы