我需要存储注册用户的IP数据。我在插入新注册用户后使用telize api检索IP和collection hooks
进行更新。
服务器/ methods.js
Meteor.methods({
// The method expects a valid IPv4 address
'geoIp': function () {
// Construct the API URL
this.unblock();
var apiUrl = 'http://www.telize.com/geoip/';
// query the API
var response = HTTP.get(apiUrl);
Meteor.users.update(
{_id: this.userId},
{$set: {ipdata: response}}
)
}
});
LIB / schemas.js
ipdata: {
type: Object,
optional: true
}
服务器/ hooks.js
Meteor.users.after.insert(function (userId, doc) {
Meteor.call('geoIp');
});
这些代码没有错误,成功注册新用户,但无法存储ipdata
任何人都弄明白我的代码有什么问题?
非常感谢你..
答案 0 :(得分:0)
我很确定在这种情况下没有设置this.userId
。你在服务器端调用Meteor.call()
而不是从另一个方法的主体调用,所以被调用的方法没有上下文。
相反,你可能想要一个常规功能。 E.g。
addGeoIp = function(userId, ip){
var response = HTTP.get(apiUrl);
Meteor.users.update(userId, {$set: {ipdata: response}});
}
Meteor.users.after.insert(function (userId, doc) {
addGeoIp(userId, ip);
});
另外,正如Mark所说,http://www.telize.com/geoip/本身只会返回服务器的IP,而不是客户端的IP。因此,您需要将客户端的IP传递给API以获取位置。