2015-11-01 57 views
0

我试图用帐户密码包来挂钩onCreateUser函数,以在创建帐户时将信息添加到另一个集合中。我已经加入此片的代码到server.js在流星中使用onCreateUser()添加数据时遇到的问题

 //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

    您是否看到服务器错误?我可以这么想,因为'ShopDetails'在'onCreateUser'回调的上下文之外被声明,所以当你试图获得'user._'时,'user'将是未定义的。 – richsilv

    +0

    对不起,迟到的回应。我意识到server.js并未作为JS文件执行,导致(a)ShopList未随信息更新(b)服务器代码中的各种错误在应用程序运行时未显示。感谢richsilv,一旦运行起来,我确实得到了这个错误,并设法纠正它。感谢Ethaan,我没有意识到使用插入时的可选回调,这非常简洁。今晚晚些时候我会研究钩子包。 – Charlie

    回答

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

    上面这个东西d工作,但为什么不使用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); 
    }); 
    
    相关问题