【问题标题】:Problems adding data using onCreateUser() in Meteor在 Meteor 中使用 onCreateUser() 添加数据时出现问题
【发布时间】:2016-02-01 15:10:52
【问题描述】:

我正在尝试使用 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 = new Mongo.Collection("shopList") //保存在集合文件夹中
  • 与帐户密码捆绑在一起的用户集合

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

【问题讨论】:

  • 您是否看到服务器错误?我想是这样的,因为ShopDetails 是在onCreateUser 回调的上下文之外声明的,所以当您尝试获取user._id 时,user 将是未定义的。
  • 抱歉回复晚了。我意识到 server.js 没有作为 JS 文件执行,导致 (a) ShopList 未使用信息更新 (b) 服务器代码中的各种错误在应用程序运行时未显示。感谢richsilv,一旦启动并运行,我确实遇到了该错误并设法纠正它。谢谢 Ethaan,我不知道使用插入时的可选回调,这很整洁。今晚晚些时候我会研究 hooks 包。

标签: mongodb meteor


【解决方案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);
});

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2013-04-24
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多