2015-03-25 47 views
0

我正在構建Web應用程序來跟蹤棒球運動員。當前與球員相關的唯一數據屬性是fName和lName。我正在使用Node.js Express 4,貓鼬和翡翠。當你點擊某個玩家時,我的get request功能會正常運行,它將把你帶到localhost:3000/player /:id,玩家信息被正確加載到視圖中。我遇到了我的post方法問題並且實際更新玩家信息提交。與其更新播放器,我的發佈方法只是添加一個新播放器。試圖用mongoose更新mongodb中的記錄。我的應用程序正在使用Node.js和Express 4

這裏是,這似乎是正常的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

讓我們來看看...你不想在路由器代碼中使用findOne()調用而不是find()嗎?

這可能只是你需要交換req.params.id與req.body.id,順便說一句。

你可以嘗試這種風格的帖子...(注意使用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 
+0

嘿感謝你這麼多的幫幫我。我討厭說,但你提供的代碼運行沒有錯誤,但類似於我已經有的只是添加一個新的球員,而不是實際編輯所選的一個。 – tilted 2015-03-25 03:29:38

+0

在這一點上,我想我會添加一個console.log(),裏面會記錄傳入的_id是什麼。它可能讓你感到驚訝。請注意,你有這樣的代碼[輸入(type =「hidden」value = _id name =「id」)],我認爲我沒有這樣做。我通常做類似於將變量傳遞給Jade [res.render('player',{playerId:_id});]然後[input(type =「hidden」value =「#{playerId}」name =「id」 )] – 2015-03-27 02:29:28

+0

老兄你真棒。我現在正在研究解決方案,但控制檯日誌告訴我該應用程序目前沒有使用正確的post方法。相反,這個帖子是我用來創建新玩家的帖子。新的播放器({fName:req.body.fName,lName:req.body.lName()){router.post('/',function(req,res){console.log(req.body.id); ) }) .save(function(err,player){ res.redirect('player'); }); });' – tilted 2015-03-28 17:26:26

相關問題