我今天第一次与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");
}
});
}
});
}
答案 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;
}