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

时间:2015-03-25 01:27:09

标签: node.js express mongoose pug

我正在构建用于跟踪棒球运动员的网络应用程序。目前与玩家相关联的唯一数据属性是fName和lName。我正在使用Node.js Express 4,mongoose和Jade。当你点击一个播放器时,我的get请求正常运行,它将带你到localhost:3000 / player /:id,播放器信息被正确加载到视图中。我的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]
          );
        }
      });
    });

以下是创建新播放器而不更新当前播放器的帖子的代码:

    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")

如果有更多有用的信息,请告诉我们。感谢您提前的时间, -fred k

1 个答案:

答案 0 :(得分:1)

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

可能只需要将req.params.id与req.body.id,btw交换。

您可以在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