Javascript NodeJs/MongoDB-在用户可以再次发布/提交之前等待X个时间
我正在建立一个视频评级网站,用户可以提交他们的视频,但我想避免用户提交/滥发他们的视频,并限制他们每小时提交一次。最好的方法是什么?我一直在读关于SetTimeOut/Interval的书,也在读关于使用一些中间件的书,但还没有找到运气 在用户发布/请求此代码后,我想给他们一个超时/冷却时间Javascript NodeJs/MongoDB-在用户可以再次发布/提交之前等待X个时间,javascript,jquery,node.js,mongodb,mongoose,Javascript,Jquery,Node.js,Mongodb,Mongoose,我正在建立一个视频评级网站,用户可以提交他们的视频,但我想避免用户提交/滥发他们的视频,并限制他们每小时提交一次。最好的方法是什么?我一直在读关于SetTimeOut/Interval的书,也在读关于使用一些中间件的书,但还没有找到运气 在用户发布/请求此代码后,我想给他们一个超时/冷却时间 router.post('/submit', isLoggedIn, function (req, res, next){ User.findOne({_id: req.user._id}, func
router.post('/submit', isLoggedIn, function (req, res, next){
User.findOne({_id: req.user._id}, function (err, userfound){
var video = new Video({
title : req.body.title,
videoLink : req.body.videoLink,
category : req.body.category,
ownByUser : req.user._id,
});
video.save(function (err, moreVideo){
userfound.myFrags.push(moreVideo); //Error : Cannot read property 'push' of undefined
userfound.save();
});
res.redirect('/dashboard')
});
}))
我还保存了提交帖子的时间/日期,也许我应该使用它并将其与当前日期进行比较?非常感谢您的帮助:-)我认为使用服务器检查的最佳方法是使用中间件,类似于下面的中间件。我还没有测试过,但你可以按原样或做一些修改来尝试
function limitVideo (req, res, next) {
Video.findOne({
ownByUser : <userId>,
},
{
createdDate : 1
}
)
.sort({createdDate : -1})
.exec (function (err, data) {
if(err) {
return <Ur Err msg>
}
if(!data) {
return <Ur Err msg>
} else {
var ONE_HOUR = 60 * 60 * 1000; // in ms
var lastPostdate = data.createdDate;
if(((new Date) - lastPostdate) >= ONE_HOUR) {
next();
} else {
return <You cant upload videos>
}
}
})
}
// Use middleware in ur post route
router.post('/submit', isLoggedIn, limitVideo, function (req, res, next){
<Ur code>
});
功能限制视频(req、res、next){
视频,芬顿({
ownByUser:,
},
{
创建日期:1
}
)
.sort({createdDate:-1})
.exec(函数(错误、数据){
如果(错误){
返回
}
如果(!数据){
返回
}否则{
var ONE_HOUR=60*60*1000;//以毫秒为单位
var lastPostdate=data.createdDate;
如果(((新日期)-lastPostdate)>=一小时){
next();
}否则{
返回
}
}
})
}
//在ur post路由中使用中间件
router.post('/submit',isLoggedIn,limitVideo,函数(req,res,next){
});
这听起来可能有些奇怪,但您可以使用另一个名为“失效”的集合,在createdDate上使用1小时的TTL索引,每当用户提交视频时,首先检查集合失效中是否有该用户ID的文档
如果没有这样的文档,则保存视频并在失效集合中输入userId和createdDate
如果已经有文档,则告诉用户他仍处于冷却期
这将在TTL索引在设置的时间(在本例中为1小时)后自行删除文档的意义上起作用
使用此功能,您还可以通过维护计数器来扩展此功能,就像在一小时左右的时间内只允许播放两个视频一样
缺点是您可能需要一个故障保险箱,就像它保存了视频但无法进入失效收集时会发生什么一样
更多关于我建议检查该用户最近提交的视频并进行时间比较。否则,可能使用会话变量