2015-11-10 38 views
1

在我看來,我是導演從「/儀表板」用戶「/給予好評」MongoDB的更新單擊

在我的路線,我有:

app.get('/upvote', function(req, res) { 
     user = req.user 
     user.score += 1; 
     user.save(); 
     res.redirect('/dashboard'); 
    }); 

這只是一個例子試圖掌握如何在後期階段將其用於不同的目的。

如何在每次有'/ upvote /'GET命令時增加用戶'分數'屬性的增量?

+0

你用什麼來連接到mongo?原生司機貓鼬......? –

+0

對不起,我正在使用貓鼬 –

回答

1

您需要在您的請求中找到給定的用戶; req.user只是一個對象而不是貓鼬模型。如果您有文檔的ID,則可以使用findById。如果你不需要,你需要在另一個字段上使用查詢查詢。

// Users is the mongoose model 
Users.findById(id, function (err, user) { 
    if (err) return handleError(err); 

    user.score += 1; 

    user.save(function(err) { 
    if (err) return handleError(err); 
    res.send(user); // Or redirect, basically finish request. 
    }); 
}); 

其次 - 我不一定會做重定向。您可以保持在同一頁面上,只需使用命令刷新用戶模型即可。

1

如果單獨修改並保存user文檔,則可能會在併發請求期間丟失投票。

相反,使用update$inc運營商做出給予好評原子:

app.get('/upvote', function(req, res) { 
    User.update({_id: req.user._id}, {$inc: {score: 1}}, function(err, count) { 
     res.redirect('/dashboard'); 
    }); 
}); 

BTW,你應該考慮使用POST或PUT請求,而不是一個GET作爲GET請求不應該改變的數據。