为nodejs中的rest api链接添加代码智能
Add code intelligence to rest api links in nodejs
我有一个nodejs应用程序,监听正在对它进行的休息调用。然而,我想给我的代码添加一些智能。
例如,我只想每5分钟执行一次给定调用的函数。因此,即使有人每秒钟或每分钟调用rest链接,我也只想每5分钟执行一次。我如何实现这种灵活性?
随机调用nodejs服务器
http:// abc.com/pager/a is called 100 times within 5 minutes should only execute the function once for the first call and must resume executing the function after 5 minutes
http:// abc.com/pager/b
http:// abc.com/pager/c
示例代码app.post('/pager/:room',function(req,res){
var room = req.params.room;
if( room == 'a'){
console.log("Room A called");
//execute function once every 5 minutes only for room a
func1(room)
}
else if( room == 'b'){
console.log("Room B called");
//execute function once every 5 minutes only for room b
func1(room)
}
else if( room == 'c'){
console.log("Room C called");
//execute function once every 5 minutes only for room c
func1(room)
}
});
这是一个泛型函数,返回另一个函数,该函数在被调用后在指定的毫秒数内禁用自己。
function tempDisableAfterCall(fn, ms) {
var timeToReset = 0;
return function() {
var currentTime = new Date().getTime();
if (currentTime < timeToReset) {
return;
} else {
timeToReset = currentTime + ms;
fn.apply(this, arguments);
}
}
}
// Function that will be temporarily disabled
function printNumber(num) {
console.log(num)
}
// Create a modified function that is disabled after it has been called
var printNumberWait = tempDisableAfterCall(printNumber, 5000);
// Call the function every 500 ms, but you will only see a log every 5 seconds
setInterval(function() {
printNumberWait(new Date().getTime());
}, 500)
这是一个基本的例子,说明无论端点被调用的频率如何,您都可以实现每5分钟只运行一次函数。
app.set('roomFunctionActive', false);
app.post('/pager/:room',function(req,res){
var room = req.params.room;
var roomFunctionActive = app.get('roomFunctionActive');
if(!roomFunctionActive) {
app.set('roomFunctionActive', true);
func1(room);
setTimeout(function() {
app.set('roomFunctionActive', false);
}, 300000);
}
});
当然,roomFunctionActive可以更改为每个房间('a', 'b', 'c')的不同变量,允许每个房间的函数每5分钟运行一次。
一个redis实例将是一个很好的解决方案,你可以设置一个键值对,并设置它在5分钟后过期。
检查键值对是否存在,如果不存在,则执行函数并设置一个新的键值对,有效期为5分钟。
这可能有点过分,但你甚至可以使用一个名为rediss -sessions的模块来创建有时间限制的令牌,特别是对于这种目的
https://www.npmjs.com/package/redis-sessions相关文章:
- 在jasmine描述函数中,自动向beforeEach和afterEach添加代码
- 如何在php echo中添加代码,使其在调用时成为弹出窗口
- 如何在不向现有JavaScript函数添加代码的情况下向该函数添加回调函数
- 添加代码以防止重复提交 JQuery 后提交不起作用
- 当我在 collapsible-set 中添加代码时,如何在 jquery Mobile 中刷新 collapsible
- 向每个函数调用添加代码的任意方法
- 动态地向 jQuery 添加代码
- 需要在重力表单wordpress插件中的表单标签中添加代码
- 我用这个添加代码做错了什么
- 使用 Javascript 在您的页面上添加代码示例
- Ace编辑器手动添加代码段
- HttpCompileException未被用户代码处理(当我在脚本中添加c#代码时)
- 以编程方式向javascript函数添加代码
- 将父窗口重定向为子窗口关闭,而不向子窗口添加代码
- 检查MySQL数据库并添加代码PHP
- 每周添加代码
- 返回$_GET["jsoncallback"]时出错,在下面添加代码javascript
- 为单击事件添加代码
- 为nodejs中的rest api链接添加代码智能
- 在javascript函数中添加代码块