【发布时间】:2014-09-01 06:40:42
【问题描述】:
我正在构建一个朋友包,我需要在每个新创建的用户文档上存储一些数据。我查看了文档,发现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, ...,这意味着这段代码实际上从未运行过。
我在尝试覆盖提供的包行为时做错了吗?
【问题讨论】:
标签: javascript meteor packages