2017-05-10 8 views
0

私はpassport.jsを使用しています。現在ログインしているメンバーのプロフィールを更新してデータベースに保存したいと思います。今は保存を使用していますが、他の誰かがこのプロファイルを同時に変更した場合に問題が発生する可能性があると私は心配しています。代わりに私は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') 
    }) 
} 

実際にはエラーは発生しませんでしたが、データベースのドキュメントは変更されていません。

私の質問:

私がログインしているユーザーアップサートするための最良の方法は何ですか?

答えて

0

ユーザーの_idを渡して、指定されたドキュメントを更新するためにデータベース内でその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); 
    } 
    }) 
} 
+0

これを少し書き直しました。コールバックパラメータ '(err、user)'に "user"が定義されていません。それは私のコードです:http://i.imgur.com/fJeU6Ur.png – kentor

+0

@kentorそれはあなたのクエリでユーザーを見つけられないため、またはuserIdが定義されていないため、未定義のようです。ユーザIDを 'var userId = req.body._id'に設定すると、あなたはbodyのid値を渡すべきです。または、paramsにidを渡している場合は、 'var userid = req.params.id' – mrtaz

関連する問題