我在Node.js上有应用程序,使用Express作为API路由,MongoDB作为DB。 我有一个抽奖活动。用户必须只加入抽奖活动一次。 我目前正在使用内存中的数组参与,但是如果你同时向API发出两个请求,那么用户将在抽奖中加入两次。 我怎么能不允许多次加入抽奖活动?
答案 0 :(得分:0)
您应该将数组存储在mondodb中,如果节点重新启动,您不希望丢失此列表。
关于“加入两次”问题,只需限制向API发出请求的客户端功能,这样只能在节流功能通过的时间内调用一次。
执行油门功能:
function throttle (callback, limit) {
var wait = false;
return function () {
if (!wait) {
callback.apply(this, arguments);
wait = true;
setTimeout(function () {
wait = false;
}, limit);
}
}
}
现在你的请求功能:
var throttleApiFunc = throttle(apiFunc, 5000);
// this can only trigger one time each 5 seconds
throttleApiFunc();
答案 1 :(得分:0)
您需要构建工作流程以支持幂等操作。也就是说,执行两次相同的操作不会改变结果。
例如,递增变量是而不是幂等,因为调用增量函数两次导致变量增加两次(例如,调用x++
两次将导致向{{{}添加2 1}})。我认为这是您当前设计的精髓所在,您提到:"如果您同时向API提出两个请求,则用户将在抽奖中加入两次"。
幂等操作的一个示例是将变量设置为值。例如,多次调用x
只会导致值var x = 1
被分配到1
。无论您拨打该号码的次数,x
始终为x
。
帮助您入门的一些资源: