尝试使用猫鼬更新 mongodb 中的记录。我的应用程序使用 Node.js 和 Express 4

Trying to update record in mongodb using mongoose. My application is using Node.js and Express 4

我正在构建 Web 应用程序来跟踪棒球 players.The 当前与球员关联的唯一数据属性是 fName 和 lName。我正在使用 Node.js Express 4、mongoose 和 Jade。当你点击一个播放器时,我的 get 请求正常运行,它将带你到 localhost:3000/player/:id,播放器信息正确加载到 view.I 我的 post 有问题] 方法并让它在提交时实际更新玩家信息。我的 post 方法不是更新播放器,而是添加一个新播放器。

这里是 get 请求的代码,似乎运行正常:

    router.get('/:id', function(req,res){
       Player.find({_id: req.params.id}, function(err, player){
        if(err){
          res.redirect('/error');
        }else{
          res.render(
            'editPlayer',
            player[0]
          );
        }
      });
    });

这是 post 创建新播放器而不更新当前播放器的代码:

    router.post('/:id', function(req,res){

       Player.where({ _id: req.params.id }).update({ fName: req.body.fName, lName: req.body.lName });

       res.redirect('player');
    });

这里是 editPlayer.jade,其中包含我用来更新播放器的表单:

    extends layout

    block content

      block content
        h1 #{fName} #{lName}
        form(method="post" action="/#{_id}")
          input(type="hidden" value=_id name="id")
          label(for="fName") First Name:
          input(type="text", name="fName", value=fName)
          label(for="lName") Last Name:
          input(type="text", name="lName", value=lName)
          input(type="submit", value="Save")

如果有更多有用的信息,请告诉我。感谢您提前抽出时间, -弗雷德·克

让我们看看...您不想在路由器代码中调用 findOne() 而不是 find() 吗?

这可能只是你需要将 req.params.id 与 req.body.id 交换,顺便说一句。

您可以在 POST 中尝试这种样式...(例如,注意此处使用 req.body.id 而不是 req.param.id)

router.post('/:id', function(req,res) {
  Player.findOne({})
    .where('_id').equals(req.body.id)
    .exec(function(err, playerRecord) {
    if (playerRecord) {
      playerRecord.fName = req.body.fName;
      playerRecord.lName = req.body.lName;
      playerRecord.save();
      console.log('player/:id replace successful with Player record');
    } else {
      console.log('POST player/:id err');
    } // End of if (playerRecord)
    res.redirect('player');
  }); // End of Player.findOne
}); // End of router.post