我使用Sails.js,并在调用函数时尝试将模型中的属性递增1。它工作并递增并返回值为1的JSON,但从不保存到数据库,因此当我稍后发出get请求时,该值仍为0.
功能:
addVote: function (req, res, next) {
Nomination.findOne(req.param('id'), function foundNomination(err, nom) {
if(err) return next(err);
if(!nom) return next();
Nomination.update(req.param('id'), {
votes: nom.votes++
})
return res.json({
votes : nom.votes
});
});
},
编辑:
现在这很奇怪。必须是一些范围问题。当我将代码更改为此时,控制台输出0然后1.如果我取出第二个console.log,它输出1 ......
addVote: function (req, res, next) {
var newVotes = 0;
Nomination.findOne(req.param('id'), function foundNomination(err, nom) {
if(err) return next(err);
if(!nom) return next();
nom.votes++;
newVotes = nom.votes;
console.log(newVotes);
});
console.log(newVotes);
Nomination.update(req.param('id'), {
votes: newVotes
}, function(err) {
if(err) return res.negotiate(err);
return res.json({
votes : newVotes
});
});
},
AHHA!它在findOne之前调用Update函数。但为什么,我该如何阻止呢?
答案 0 :(得分:1)
有点迟到了,但我可能有一个更简单的解决方法。当你将++放在一个数字后面时,它会向该值添加一个,但它会在执行此操作之前返回该值。如果你希望nom.votes的值增加1,你需要做的就是把++放在值之前,然后它会在添加一个之后返回值,如下所示:
for (i = 0; i < len_n; i++, len_n = i+1) {
答案 1 :(得分:0)
我认为你必须这样做:
nom.votes++; //or nom.votes = nom.votes+1;
Nomination.update(req.param('id'),
{
votes: nom.votes
}).exec(function(err, itemUpdated)
{
if(err)//error
{
//manage error
}
else
{
res.json({
votes : itemUpdated.votes
});
}
});
所有数据库访问都是异步的,因此您必须在模型上为exec
create
ect ..调用update
方法
最后你有:
addVote: function (req, res, next) {
var newVotes = 0;
Nomination.findOne(req.param('id'), function foundNomination(err, nom)
{
if (err)
{
return next(err);
}
nom.votes++;
newVotes = nom.votes;
console.log(newVotes);
Nomination.update(req.param('id'), {
votes : newVotes
}, function (err)
{
if (err)
{
return res.negotiate(err);
}
return res.json({
votes : newVotes
});
});
});
},