【问题标题】:Update member in mongoose更新猫鼬中的成员
【发布时间】:2017-10-09 17:54:26
【问题描述】:

我正在使用 passport.js,我想更新当前登录会员的个人资料并将其保存到数据库中。现在我正在使用 save 但我担心当其他人同时修改此配置文件时这可能会导致问题。相反,我想使用 MongoDB 的 upsert 功能。

function updateProfile(req, res) {
    var user = req.user
    var form = req.body
    var profile = {
        name: form.profileRealName,
        bio: form.profileBio,
        url: form.profileUrl,
        location: form.profileLocation
    }

    user.profile = profile
    logger.info(user)

    user.save(function(err) {
        if(err)
            next(err)
        else
            res.redirect(302, '/settings/profile')
    })  
}

实际上并没有抛出错误但是数据库中的文档没有改变。

我的问题:

更新我的登录用户的最佳方式是什么?

【问题讨论】:

    标签: node.js express mongoose passport.js


    【解决方案1】:

    您应该传递用户的 _id 并使用它在数据库中查找它以更新指定的文档。

    function updateProfile(req, res) {
      var options = {
                      upsert : true,
                      new    : true
                     }
      var    user  = req.body._id
      var    form  = req.body
    
      db.User.findOneAndUpdate({_id: user}, form, options, (err, user) => {
        if(err) {
          res.json(err)
        }else{
          res.json(user)
          console.log('details: %s', user);
        }
      })
    }
    

    【讨论】:

    • 我已经重写了一点,现在它抛出“用户”没有为回调参数(err, user)定义。这是我的代码:i.imgur.com/fJeU6Ur.png
    • @kentor 看起来它是未定义的,因为它在您的查询中找不到用户,或者该 userId 未定义。尝试将 userid 设置为 var userId = req.body._id 您应该在正文中传递 id 值。或者,如果您在参数中传递 id,它将是 var userid = req.params.id
    猜你喜欢
    • 2012-03-28
    • 2016-05-14
    • 2020-11-13
    • 2019-01-23
    • 2016-05-24
    • 2012-05-18
    • 1970-01-01
    • 2015-04-10
    • 2017-11-01
    相关资源
    最近更新 更多