我正在建立一个朋友包,我需要在每个创建的新用户文档上存储一些数据。我查看了文档,发现Accounts.onCreateUser
。文档特别声明它只能被调用一次,其他调用将覆盖先前指定的行为。
所以我做的是:
onCreateUser
函数
if (Meteor.isServer) {
var _onCreateUser = Accounts.onCreateUser.bind(Accounts);
// Since onCreateUser overrides default behavior, and we don't want to restrict package users
// by removing the onCreateUser function, we override onCreateUser to modify the user document before the regular onCreateUser call.
Accounts.onCreateUser = function (func) {
console.log('onCreateUser definition');
_onCreateUser(function (options, user) {
console.log('onCreateUser call, the user should now have a profile');
if (!user.profile) {
user.profile = options.profile || {};
}
if (!user.profile.friends) {
user.profile.friends = [];
}
return func(options, user);
});
};
}
问题是,如果我查看我的服务器日志,我从未看到日志onCreateUser definition
或onCreateUser call, ...
,这意味着此代码实际上从未运行过。
我是否在尝试覆盖提供的包行为时出错?
答案 0 :(得分:0)
Accounts.onCreateUser
是您调用绑定自定义函数的方法。 "只打电话一次"意味着您只能绑定一个自定义功能。 如果没有其他任何东西绑定自定义函数,onCreateUser永远不会被调用
例如,如果您只想添加个人资料&朋友根据你的代码,只做:
Accounts.onCreateUser(function (options, user) {
console.log('onCreateUser call, the user should now have a profile');
if (!user.profile) {
user.profile = options.profile || {};
}
if (!user.profile.friends) {
user.profile.friends = [];
}
return user;
});
根据您的评论,我建议创建一个问题/向Meteor提交拉取请求,以允许Accounts.onCreateUser
将每个函数附加到一个钩子数组。
您需要修改的代码位于Accounts.insertUserDoc