2015-11-01 14 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); 
    }); 
    
    相關問題