在Meteor中使用onCreateUser()添加数据时出现问题

时间:2015-11-01 18:33:02

标签: mongodb meteor

我正在尝试使用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;
        });  

我在应用程序中的两个集合是 -

  • ShopList =新的Mongo.Collection(" shopList")//保存在馆藏文件夹中
  • 与帐户密码捆绑在一起的用户集合

一旦新用户创建了一个帐户,我想将一个包含所有必填字段(shopDetails)的对象插入到ShopList集合中(为了以后为每个商店创建个人仪表板)。但是在创建了几个测试帐户后,我无法在RoboMongo的ShopList集合中看到它们,我知道正在插入用户帐户,因为我可以在用户集合中看到它们。谁能告诉我哪里出错了?谢谢

1 个答案:

答案 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);
});