我正在尝试使用accounts-password包挂钩onCreateUser函数,以便在创建帐户时将信息添加到另一个集合中。我已将这段代码添加到server.js
中 //server.js
var ShopDetails = {
name = "",
postCode = "",
type = "";
openTime = "",
closeTime = "",
phoneNum = 0,
dashboardDetails = false //until shop populates these fields
createdBy = user._id //_id taken from function below
}
Accounts.onCreateUser(function(options,user){
var userId = user._id;
ShopList.insert(shopDetails);
return user;
});
我在应用程序中的两个集合是 -
一旦新用户创建了一个帐户,我想将一个包含所有必填字段(shopDetails)的对象插入到ShopList集合中(为了以后为每个商店创建个人仪表板)。但是在创建了几个测试帐户后,我无法在RoboMongo的ShopList集合中看到它们,我知道正在插入用户帐户,因为我可以在用户集合中看到它们。谁能告诉我哪里出错了?谢谢
答案 0 :(得分:1)
如果您打印
,您会得到什么? 钩子里面的 console.log(shopDetails)
?
还尝试在插入上使用回调作为second parameter,因此我们可以帮助您这样做
ShopList.insert(ShopDetails,function(error,result){
if(error){
console.log(error); //should print the error and this help us more to help you =D
}else{
console.log(result);
}
});
为什么你最好不要做像
这样的事情insertShopDetails = function(userId){
var ShopDetails = {
name = "",
postCode = "",
type = "";
openTime = "",
closeTime = "",
phoneNum = 0,
dashboardDetails = false,
createdBy = userId
}
ShopList.insert(ShopDetails,function(error,result){
if(error){
console.log(error);
}else{
console.log(result);
}
});
}
然后在onCreatedHook
Accounts.onCreateUser(function(options,user){
var userId = user._id;
insertShopDetails(userId);
return user;
});
上述内容应该有效,但为什么不使用hook?
更好地做到这一点meteor add matb33:collection-hooks
Meteor.users.after.insert(function(userId, doc, modifier) {
var ShopDetails = {
name = "",
postCode = "",
type = "";
openTime = "",
closeTime = "",
phoneNum = 0,
dashboardDetails = false
createdBy = userId
}
ShopList.insert(shopDetails);
});