我正在构建用于跟踪棒球运动员的网络应用程序。目前与玩家相关联的唯一数据属性是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
答案 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