我正在尝试在Meteor Accounts.onCreateUser用户创建功能中访问名为city的变量,并且在尝试这样做时没有成功。我试图在HTTP.get调用结束时返回city,并尝试在HTTP.get之外创建city var,只是设置city而不使用var,但这些东西似乎都没有用。当console.log(city)运行时,它会准确输出所需的信息,因此这个变量不能成为问题。如果我犯了一个错误,请原谅我。
Accounts.onCreateUser( function (options, user) {
if (options.profile) {
options.profile.picturelrg = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=large";
user.profile = options.profile;
options.profile.picturesm = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=small";
options.profile.messenger = "https://www.messenger.com/t/" + user.services.facebook.id;
HTTP.get("http://ipinfo.io", function (error, result) {
var place = JSON.parse(result.content);
var city = place.city;
console.log(city);
});
options.profile.city = city;
}
return user;
});
答案 0 :(得分:0)
技术上对此的正确设置是您需要使用HTTP.get
的同步版本。有关示例,请参阅docs和this question。
然而,还有一个更基本的问题:您尝试获取用户的位置数据,但onCreateUser
仅在服务器上运行。因此,即使您确实解决了这个问题,您也会在每个用户的个人资料中获得相同的数据。您需要在客户端上运行get
并通过方法进行更新。尝试这样的事情:
Accounts.createUser(options, function(err) {
if (!err) {
HTTP.get(..., function(err, result) {
var city = ...;
var place = ...;
Meteor.call('updateProfileWithCityandPlace', city, place);
});
}
});
Meteor.methods({
updateProfileWithCityandPlace: function(city, place) {
check(city, String);
check(place, String);
Meteor.users.update(this.userId, {
$set: {'profile.city': city, 'profile.place': place}
});
}
});