2015-11-06 1 views
0

J'essaie d'insérer un ID de document dans la clé user.profile dans Accounts.onCreateUser(), afin de pouvoir associer un document distinct à une collection différente (contenant des informations utilisateur) à un utilisateur lorsqu'ils sont connectés.Ajout du document associatif _id à la clé user.profile dans Accounts.onCreateUser()

//serverMain.js 
Accounts.onCreateUser(function(options,user){ 
    var userId = user._id; 
    user.profile = user.profile || {}; 
    _.extend(user.profile, {profComp: false}); 
    insertShopObject(userId); 
    return user; 
}); 

L'insert J'utilise est

insertShopObject(userId); 

Cela permet d'insérer un nouveau document avec des champs prédéfinis dans un séparé collection appelée 'ShopList', j'ai passé dans l'userId comme paramètre est ajouté en tant que champ dans la collection 'ShopList'. Je peux voir à partir de la console du serveur que le document _id est retourné quand j'appelle insertShopObject (userId);

enter image description here

Je veux en quelque sorte d'attraper cet identifiant lorsque le document est inséré et l'ajouter dans la clé de user.profile sur la création d'utilisateur comme si

_.extend(user.profile,{shopId: <-- ?-->}) 

Voici la fonction insertShopObject, je essayé de revenir au lieu de consigner la consignation du résultat dans une variable de maintien sans chance.

//serverMain.js 

    insertShopObject = function(userId){ 
    var newShop = { 
     //pre-set fields..... 
     } 
    ShopList.insert(newShop, function(error,result){ 
     if(error){console.log(error);} 
     else {console.log(result)} 
    }); 
} 
+0

Vous insérez de manière asynchrone sur le serveur, alors que vous pouvez insérer de façon synchrone, obtenir l'identifiant et l'ajouter aux données de l'utilisateur. – MasterAM

+0

Un grand merci Michel et MasterAM. – Charlie

Répondre

1

Vous devez rendre l'insertion synchrone pour que cela fonctionne. Omettre le rappel de ShopList.insert() et faire:

insertShopObject = function(userId){ 
    var newShop = { 
    //pre-set fields..... 
    } 
    var shopId = ShopList.insert(newShop); 
    return shopId; 
}