状况:
我创建了1小时的垃圾邮件时间限制。
当用户发帖时,当前时间Date.now()
会保存在user.last
。
当他再次发帖时,我会使用Date.now()
获取当前时间并将其与user.last
进行比较。
问题:
问题如下:
我在大约1分钟内发布两次。
根据我的代码控制台输出,两个帖子之间的时间差异大于1小时。
问题:
我做错了什么?我确实将env TZ设置为UTC。
CODE:
exports.create = function (req, res) {
var article = new Article(req.body);
article.user = req.user;
console.log("LAST: "+article.user.last.getTime());
console.log("Date.now(): "+Date.now());
if (article.user.last.getTime() != null && article.user.last.getTime() != undefined) {
console.log("DATE DIFFERENCE: "+(Date.now() - article.user.last));
if ((Date.now() - article.user.last > 1000 * 60 * 60)) {
article.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(article);
if (article.user) {
article.user.last = Date.now();
console.log("NEW LAST: "+article.user.last.getTime());
} else {
res.status(401).send({
message: 'User is not signed in'
});
}
}
});
}
else {
return res.status(422).send({
message: "You need to wait 1 hour between Article creations or if you just created an account."
});
}
}
else {
console.log("2");
article.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(article);
if (article.user) {
article.user.last = Date.now();
console.log("3) LAST: "+article.user.last.getTime());
} else {
res.status(401).send({
message: 'User is not signed in'
});
}
}
});
}
};
CONSOLE:
LAST: 1486438249652
Date.now(): 1486515834377
DATE DIFFERENCE: 77584725
NEW LAST: 1486515834394
修改
用户模型
/**
* User Schema
*/
var UserSchema = new Schema({
//SOME CODE
last: {
type: Date
},
//SOME CODE
});
答案 0 :(得分:1)
问题是用户记录实际上并未保存。您的代码保存文章,然后设置用户的.last
属性,但用户的Mongoose模型绝不会被保存(article.user.save()
)。
这意味着.last
保留了首次创建时的状态,因此记录的日期差异将单调增加。
这是重要的一点:
article.save(function(err) {
if (err) {
res.status(422).send({message: errorHandler.getErrorMessage(err)});
} else {
if (article.user) {
article.user.last = Date.now();
article.user.save(function (err) {
if (err) res.status(500).send({message: 'Database error'});
else res.json(article);
}
} else {
res.status(401).send({message: 'User is not signed in'});
}
}
});